从std :: string转换为String ^

时间:2012-12-05 07:19:59

标签: string managed-c++

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

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

3 个答案:

答案 0 :(得分:6)

谷歌搜索显示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;
}

另见Overview of Marshaling

答案 1 :(得分:5)

来自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

答案 2 :(得分:0)

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

根据我在 https://bytes.com/topic/c-sharp/answers/725734-utf-8-std-string-system-string 上的发现,我构建了这个解决方案,它似乎对我至少适用于德语变音符号:

icc: warning #10193: -vec is default; use -x and -ax to configure vectorization
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/basic_string.h(5052) (col. 50): error #2102: violation of ansi-alias rules

compilation aborted for main.cpp (code 4)