可以在不使用 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

本文介绍了一种在不使用Vcclr.h中的PtrToStringChars的情况下将.NET中的String类型转换为C++标准库中的std::string或std::wstring的方法。通过使用.NET的互操作服务,可以实现两种不同编程环境之间的字符串转换。
1478

被折叠的 条评论
为什么被折叠?



