什么时候需要使用FreeHGlobal()?
如果我按如下方式使用 Marshal::StringToHGlobalAnsi
:
char *src = (char *)Marshal::StringToHGlobalAnsi(this->Textbox1->Text).ToPointer();
我需要使用 Marshal::FreeHGlobal()
吗?如果,我应该给出什么参数?
If I use Marshal::StringToHGlobalAnsi
as following:
char *src = (char *)Marshal::StringToHGlobalAnsi(this->Textbox1->Text).ToPointer();
Do I need to use Marshal::FreeHGlobal()
? And if, What parameter should I give ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据 MSDN - 是的,您需要调用 FreeHGlobal。 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi%28v=VS.100%29.aspx:
According to MSDN - yes, you need to call FreeHGlobal. http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi%28v=VS.100%29.aspx:
按照 C++ 标准,C# 字符串转换函数绝对是可怕的。
C++/CLI 有自己的字符串转换助手,它遵循 RAII 的规则来自动清理临时缓冲区。只需使用:
The C# string conversion functions are absolutely horrible by C++ standards.
C++/CLI has its own string conversion helpers, which follow the rules of RAII to automatically clean up temporary buffers. Just use:
附上我的Marshal::FreeHGlobal的2个练习代码
请注意,Marshal::FreeHGlobal() 的参数是不同的!
Attach my 2 practice code for Marshal::FreeHGlobal
Be noted that the argument of Marshal::FreeHGlobal() are different!!