[英]C# 'String' to C++ 'std::string'
我有一個C#DLL,具有以下功能:
[DllExport(ExportName = "getOutputString", CallingConvention = CallingConvention.StdCall)]
public static String getOutputString()
{
String managedString = "123456789012345678901234567890";
return managedString;
}
和一個C ++應用程序,將上述功能用作:
HMODULE mod = LoadLibraryA("MyCustomDLL.dll");
using GetOutputString = std::string (__stdcall *) ();
GetOutputString getOutputString = reinterpret_cast<GetOutputString>(GetProcAddress(mod, "getOutputString"));
並希望將DLL中的字符串存儲在C ++變量中,如下所示:
std::string myVariable = getOutputString();
當我運行C ++應用程序時,它崩潰了。
但是當我只在std :: printf代碼中使用該函數時,它的工作原理就很完美:
std::printf("String from DLL: %s\n", getOutputString());
我的實際任務是從DLL獲取字符串數組,但是如果您可以幫助我從C#到C ++中的std :: string獲取簡單的String,那就太好了。
或者只是給我一個提示,通過std :: printf()將打印的字符串保存在std :: string類型的變量中。
使用CLI的C ++,使用System :: String ^(這是一個.Net字符串,即與C#相同)
using GetOutputString = System::String^ (__stdcall *) ();
那你可以做
std::string standardString = context.marshal_as<std::string>(managedString);
根據文檔 ,C#將string
對象編組為簡單的“指向以NULL終止的ANSI字符數組的指針”,或者用C ++術語表示為const char *
。
如果將GetOutputString
的typedef更改為返回const char *
,則一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.