gpt4 book ai didi

c# - 传递 StringBuilder 并将结果从 c++ dll 返回到 c#

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:09 25 4
gpt4 key购买 nike

我在 C# 中有以下代码:

[DllImport("ClassLibrary2.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern void GetString(StringBuilder buffer, ref int bufferSize);

void get()
{
openFileDialog1.ShowDialog();
int bufferSize = 32;
StringBuilder buffer = new StringBuilder(bufferSize);
GetString(buffer, ref bufferSize);
string currentString = buffer.ToString();
MessageBox.Show(currentString);
}

以及以下 C++ 语言:

extern "C" __declspec(dllexport) void GetString(char* buffer, int* bufferSize){
MD5 md5;
char *returnChar = md5.digestFile(buffer);
cout << returnChar << endl;
strcpy(buffer, returnChar);
}

我想弄清楚为什么它不起作用。我尝试了很多很多东西,但似乎都不起作用。这可能是唯一不会直接让我的 C# 程序崩溃的东西,所以我只能使用它。我需要一个字符串,但我可以用 StringBuilder 来做也是。

是的,我的程序确实像 cout<<returnChar<<endl; 一样工作工作并显示我需要看到的内容。

是的,我尝试使用调用约定 stdcall 对其进行编码(marshal)处理和许多其他...传递和获取字符串的最简单方法是什么?

最佳答案

CharSet = CharSet.Autovoid GetString(char* buffer, int* bufferSize) 不兼容。使用 CharSet = CharSet.Ansi 使其工作。 CharSet.Auto 仅用于导入同时存在于 Ansi 和 Unicode 变体中的系统库函数,并让 .net 选择正确的函数进行调用。

关于c# - 传递 StringBuilder 并将结果从 c++ dll 返回到 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com