如果我使用Marshal::StringToHGlobalAnsi
如下:
char *src = (char *)Marshal::StringToHGlobalAnsi(this->Textbox1->Text).ToPointer();
我需要使用Marshal::FreeHGlobal()
吗?如果,我应该给出什么参数?
答案 0 :(得分:4)
根据MSDN - 是的,您需要致电FreeHGlobal。 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi%28v=VS.100%29.aspx:
因为此方法分配了a所需的非托管内存 字符串,通过调用FreeHGlobal
总是释放内存
答案 1 :(得分:1)
C ++字符串转换函数在C ++标准中绝对可怕。
C ++ / CLI有自己的字符串转换助手,它遵循RAII的规则来自动清理临时缓冲区。只需使用:
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>
using namespace msclr::interop;
marshal_context converter;
const char *src = converter.marshal_as<const char*>(Textbox1->Text);
答案 2 :(得分:1)
附上Marshal :: FreeHGlobal的2个练习代码 需要注意的是,Marshal :: FreeHGlobal()的论点是不同的!!
string CPlusPlusString;
String ^VisualString;
VisualString=textBox1->Text;
CPlusPlusString=(char *)Marshal::StringToHGlobalAnsi(VisualString).ToPointer();
Marshal::FreeHGlobal(Marshal::StringToHGlobalAnsi(VisualString));
char *CString;
String ^VisualString;
VisualString=textBox1->Text;
CString = (char*) Marshal::StringToHGlobalAnsi(VisualString).ToPointer();
Marshal::FreeHGlobal(IntPtr(CString));