字符串有一個^
,因爲這是管理參考的標記。基本上,它的使用方式與非託管土地上的*
相同,除了它只能指向一個對象類型,而不是指向其他指針類型或無效。
TCHAR
已經#defined(或者通過typedef,我記不清了)要麼char
或wchar_t
的基礎上,_UNICODE預處理器定義。因此,我會使用它並編寫兩次代碼。
內聯:
TCHAR* str;
String^ managedString
#ifdef _UNICODE
str = (TCHAR*) Marshal::StringToHGlobalUni(managedString).ToPointer();
#else
str = (TCHAR*) Marshal::StringToHGlobalAnsi(managedString).ToPointer();
#endif
// use str.
Marshal::FreeHGlobal(IntPtr(str));
或作爲對轉換方法,這兩種假設輸出緩衝區已被分配並且是足夠大。根據TCHAR的定義,方法重載應該使它選擇正確的方法。
void ConvertManagedString(String^ managedString, char* outString)
{
char* str;
str = (char*) Marshal::StringToHGlobalAnsi(managedString).ToPointer();
strcpy(outString, str);
Marshal::FreeHGlobal(IntPtr(str));
}
void ConvertManagedString(String^ managedString, wchar_t* outString)
{
wchar_t* str;
str = (wchar_t*) Marshal::StringToHGlobalUni(managedString).ToPointer();
wcscpy(outString, str);
Marshal::FreeHGlobal(IntPtr(str));
}
re:你的國旗 - 你需要發郵件給team @ stackoverflow尋求幫助。另外,經驗教訓? – Will 2011-04-15 13:11:53