6

我在 C++ 中有一个函数,该函数具有 std::string 类型的值,并希望将其转换为 String^。

void(String ^outValue)
{
   std::string str("Hello World");
   outValue = str;
}
4

3 回答 3

11

谷歌搜索显示marshal_as(未经测试):

// marshal_as_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string>
#include <msclr\marshal_cppstd.h>

using namespace System;
using namespace msclr::interop;

int main() {
   std::string message = "Test String to Marshal";
   String^ result;
   result = marshal_as<String^>( message );
   return 0;
}

另请参阅编组概述

于 2012-12-05T07:35:00.480 回答
9

来自 MSDN:

#include <string>
#include <iostream>
using namespace System;
using namespace std;

int main() {
   string str = "test";
   String^ newSystemString = gcnew String(str.c_str());
}

http://msdn.microsoft.com/en-us/library/ms235219.aspx

于 2015-01-02T11:29:11.423 回答
0

据我所知,至少 marshal_as 方法(不确定 gcnew 字符串)会导致 std::string 中的非 ASCII UTF-8 字符被破坏。

根据我在https://bytes.com/topic/c-sharp/answers/725734-utf-8-std-string-system-string上找到的内容,我构建了这个似乎对我有用的解决方案最少使用德语变音符号:

System::String^ StdStringToUTF16(std::string s)
{

 cli::array<System::Byte>^ a = gcnew cli::array<System::Byte>(s.length());
 int i = s.length();
 while (i-- > 0)
 {
    a[i] = s[i];
 }

 return System::Text::Encoding::UTF8->GetString(a);
}
于 2021-01-19T16:24:54.960 回答