如果我使用Marshal::StringToHGlobalAnsi
如下:何時需要使用FreeHGlobal()?
char *src = (char *)Marshal::StringToHGlobalAnsi(this->Textbox1->Text).ToPointer();
我需要使用Marshal::FreeHGlobal()
?如果,我應該給什麼參數?
如果我使用Marshal::StringToHGlobalAnsi
如下:何時需要使用FreeHGlobal()?
char *src = (char *)Marshal::StringToHGlobalAnsi(this->Textbox1->Text).ToPointer();
我需要使用Marshal::FreeHGlobal()
?如果,我應該給什麼參數?
根據MSDN - 是的,你需要打電話給FreeHGlobal。 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi%28v=VS.100%29.aspx:
由於這種方法分配用於 字符串所需的非託管存儲器,總是通過調用FreeHGlobal
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實踐代碼元帥:FreeHGlobal 需要指出的是元帥: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));
與以下不同的是什麼?'元帥:你可能沒有單獨的變量, :StringToHGlobalAnsi'返回一個'IntPtr',這就是'Marshal :: FreeHGlobal'作爲一個參數。 –
但我需要給'元帥:FreeHGlobal什麼參數()'在我的情況! – Aan
您使用StringToHGlobalAnsi分配了內存。根據文檔你應該釋放這個內存。 – oryol
是的,但在我的情況下,我沒有一個名字,需要免費的內存部分!所以,我沒有'FreeHGlobal()'的具體參數! – Aan