http://msdn.microsoft.com/zh-cn/library/1b4az623%28VS.80%29.aspx
可以在不使用 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;
}
C#与C++字符串互转
本文介绍了一种在不使用Vcclr.h中的PtrToStringChars的情况下,将.NET Framework中的String类型转换为C++标准库中的std::string或std::wstring的方法。通过示例代码展示了如何利用Runtime::InteropServices命名空间中的Marshal类来完成这一转换。
946

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



