Visual C++ .NETでSystem::String^とchar*の相互回転

3221 ワード

Visual C++を使用する.NETの管理拡張システム::String^からchar*に変換するいくつかの方法. 
方法1
StringToHGlobalAnsi
Stringオブジェクトを管理するコンテンツをネイティブ・スタックにコピーし、動的にアメリカ国立標準学会(ANSI)フォーマットに変換します.このメソッドでは、必要なネイティブ・スタック・メモリが割り当てられます.
//using namespace System::Runtime::InteropServices;
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal( IntPtr(str2) );

2

VC7  CString   , String CString :
//#include 
System::String ^ str = "Hello world
";
CString str3( str ); printf(str3);
---------------------------------------   char *    String^    ------------------------

const char * p = "   ";
String ^ MyStr = Marshal::PtrToStringAnsi((IntPtr)(char *)p);
Console::WriteLine(MyStr);


//compiler option:cl /clr  
#include 
#include 
#include 
#using 
using namespace System;
using namespace System::Runtime::InteropServices;

int _tmain(void)
{
    System::String ^str = "Hello world
";     //method 1     char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);     printf(str2);     Marshal::FreeHGlobal( IntPtr(str2) );
    //method 2
    CString str3(str); 
    printf(str3);
 
    
  const char * p = "   ";
  String ^ MyStr = Marshal::PtrToStringAnsi((IntPtr)(char *)p);
  Console::WriteLine(MyStr);
return 0;}