1. MSDN用法
MSDN链接地址: ms-help://MS.MSDNQTR.v90.chs/dv_vccore/html/385da01b-5649-4543-8076-e3e251243ff0.htm
#include <vcclr.h>
using namespace System;
bool To_string( String* source, string &target )
{
const __wchar_t __pin * wch = PtrToStringChars( source );
int len = (( source->Length+1) * 2);
char *ch = new char[ len ];
bool result = wcstombs( ch, wch, len ) != -1;
target = ch;
delete ch;
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
System::String* strSys("aaa10a");
string strTemp;
if(To_string(strSys, strTemp))
{
printf("%s \n", strTemp.c_str());
}
getchar();
return 0;
}
2. StringToHGlobalAnsi方式
StringToHGlobalAnsi将String的内容复制到本机堆,此方法需要动态分配堆内存。
using namespace System;
using namespace System::Runtime::InteropServices; System::String * str = S"Hello world\n"; char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str); printf(str2);
3. System.String^与System.String*区别
两者没有区别,只是vs环境配置的问题。
默认情况下书写成System.String^,此时项目的 配置属性->常规->公共语言运行库支持项选择为: 公共语言运行库支持(/clr)
System.String*时配置选择: 公共语言运行库支持,原来的语法 (/clr:oldSyntax)
由此看来*是老旧的叫法,呵呵