簡體   English   中英

C#'字符串'到C ++'std :: string'

[英]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);

(信用[ https://stackoverflow.com/a/1300903/1848953]

根據文檔 ,C#將string對象編組為簡單的“指向以NULL終止的ANSI字符數組的指針”,或者用C ++術語表示為const char *

如果將GetOutputString的typedef更改為返回const char * ,則一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM