我在C ++中有一个函数,它具有std :: string类型的值,并希望将其转换为String ^。
void(String ^outValue)
{
std::string str("Hello World");
outValue = str;
}
答案 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;
}
答案 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());
}
答案 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)