我发现了一段非常好的代码,它将字符串转换为System:String^
,如下所示:
System::String^ rtn = gcnew String(move.c_str()); // 'move' here is the string
我正在将rtn传递回一个C#程序。无论如何,在这个代码存在的函数中,我传递了一个System::String^
。我还发现了一些使用以下代码将System:String^
转换为字符串的代码:
pin_ptr<const wchar_t> wch = PtrToStringChars(cmd); // 'cmd' here is the System:String
size_t convertedChars = 0;
size_t sizeInBytes = ((cmd->Length + 1) * 2);
errno_t err = 0;
char *ch = (char *)malloc(sizeInBytes);
err = wcstombs_s(&convertedChars,ch, sizeInBytes,wch, sizeInBytes);
现在我可以用"ch"作为字符串了。
然而,这似乎比使用gcnew
以其他方式进行转换要多得多。所以,最后我的问题是,有没有什么东西可以用类似于gcnew的方式将System::String^
转换为字符串?
使用VC++的封送处理库:C++中的封送概述
#include <msclr/marshal_cppstd.h>
// given System::String^ mstr
std::string nstr = msclr::interop::marshal_as<std::string>(mstr);
这可能很有用:
wchar_t *str = "Hi StackOverflow"; //native
String^ mstr= Marshal::PtrToStringAnsi((IntPtr)str); // native to safe managed
wchar_t* A=( wchar_t* )Marshal::StringToHGlobalAnsi(mstr).ToPointer(); // return back to native
不要忘记using namespace System::Runtime::InteropServices;