将标准c++字符串转换为string ^



我想在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());

我的代码出了什么问题?

微软在Visual Studio中提供了他们的c++支持库,以促进c++和c++/CLI之间的交互。该库提供了模板函数marshal_as,它可以将std::string转换为System::String^:

#include <msclrmarshal_cppstd.h>
std::string stdString;
System::String^ systemString = msclr::interop::marshal_as<System::String^>(stdString);

相关内容

  • 没有找到相关文章

最新更新