可以在不使用 Vcclr.h 中的 PtrToStringChars 的情况下将 String 转换为 std::string 或 std::wstring。
// convert_system_string.cpp // compile with: /clr #include <string> #include <iostream> using namespace std; using namespace System; void MarshalString ( String ^ s, string& os ) { using namespace Runtime::InteropServices; const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); } void MarshalString ( String ^ s, wstring& os ) { using namespace Runtime::InteropServices; const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); } int main() { string a = "test"; wstring b = L"test2"; String ^ c = gcnew String("abcd"); cout << a << endl; MarshalString(c, a); c = "efgh"; MarshalString(c, b); cout << a << endl; wcout << b << endl; }
test abcd efgh
转自:http://msdn.microsoft.com/zh-cn/library/1b4az623(v=vs.90).aspx