如何:将 System::String 转换为标准字符串

如何:将 System::String 转换为标准字符串

// 《精通.NET互操作:P/Invoke、C++ Interop和COM Interop》
// ms-help: // MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccore/html/79e2537e-d4eb-459f-9506-0e738045b59e.htm
//  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;
}

你可能感兴趣的:(如何:将 System::String 转换为标准字符串)