在VC++.net中将System::String __gc* 转换为本机的char *或wchar_t *的三种方法:
//#using <mscorlib.dll>
//using namespace System;
//using namespace System::Runtime::InteropServices;
String __gc* strHello = S"Hello";
const char* pszHello = (const char*)(Marshal::StringToHGlobalAnsi(strHello)).ToPointer();
// 在此使用 pszHello .......
Marshal::FreeHGlobal(System::IntPtr((void*)pszHello));//释放
//#include < vcclr.h >
//#using < mscorlib.dll >
//sing namespace System;
String __gc* strHello = S"Hello";
const wchar_t __pin* pwszHello = PtrToStringChars(strHello);
char* pszHello = (char *)malloc((strHello->Length + 1) * 2);
wcstombs(pszHello, pwszHello, (strHello->Length + 1) * 2);
// 在此使用 pszHello .......
free(pszHello);//释放
//#using <mscorlib.dll>
//using namespace System;
String __gc* strHello = S"Hello";
wchar_t* pwszHello = (wchar_t *)malloc(strHello->Length + 1);
for(int i=0;i<strHello->get_Length();i++)
{
pwszHello[i] = strHello->get_Chars(i);
}
// 在此使用 pszHello .......
free(pwszHello);//释放
方法一:
// compile with: /clr//#using <mscorlib.dll>
//using namespace System;
//using namespace System::Runtime::InteropServices;
String __gc* strHello = S"Hello";
const char* pszHello = (const char*)(Marshal::StringToHGlobalAnsi(strHello)).ToPointer();
// 在此使用 pszHello .......
Marshal::FreeHGlobal(System::IntPtr((void*)pszHello));//释放
方法二:
// compile with: /clr//#include < vcclr.h >
//#using < mscorlib.dll >
//sing namespace System;
String __gc* strHello = S"Hello";
const wchar_t __pin* pwszHello = PtrToStringChars(strHello);
char* pszHello = (char *)malloc((strHello->Length + 1) * 2);
wcstombs(pszHello, pwszHello, (strHello->Length + 1) * 2);
// 在此使用 pszHello .......
free(pszHello);//释放
方法三:
// compile with: /clr//#using <mscorlib.dll>
//using namespace System;
String __gc* strHello = S"Hello";
wchar_t* pwszHello = (wchar_t *)malloc(strHello->Length + 1);
for(int i=0;i<strHello->get_Length();i++)
{
pwszHello[i] = strHello->get_Chars(i);
}
// 在此使用 pszHello .......
free(pwszHello);//释放