将标准C ++字符串转换为String ^

时间:2011-12-22 13:31:14

标签: string visual-c++ c++-cli stdstring

我想在Visual C ++环境中将std :: string转换为System :: String ^。我知道我们可以通过MarshalString函数将System :: String转换为std :: string,如下所示:

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));
}

我找不到将std :: string转换为System :: String的方法,但我发现System :: String的构造函数带有如下参数:

System::String(Char* value, Int32 startIndex, Int32 length)

我尝试使用如下代码,但它无法给我一个正确的解决方案:

std::string str1 = "MyString";
System::String^ str = new System::String(str1.c_str(), 0, str1.length());

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:6)

Microsoft为C++ Suppport Library提供了Visual Studio,以促进C ++和C ++ / CLI之间的交互。该库提供了模板函数marshal_as,可以为您转换std::stringSystem::String^

#include <msclr\marshal_cppstd.h>

std::string stdString;
System::String^ systemString = msclr::interop::marshal_as<System::String^>(stdString);