gpt4 book ai didi

c# - 从 c# 调用的 c++ dll 导出函数返回字符串

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

我正在尝试从 C++ dll 导出函数返回一个字符串。我从 c# 调用这个函数。我在互联网上看到了很多例子,我真的很困惑该怎么做。

我的导出函数的 C++ 代码:

extern "C" __declspec(dllexport)  char*  __cdecl getDataFromTable(char* tableName)
{
std::string st = getDataTableWise(statementObject, columnIndex);
printf(st.c_str());

char *cstr = new char[st.length() + 1];
strcpy(cstr, st.c_str());
return cstr;
}

当我尝试从 C# 调用此函数时:

[DllImport("\\SD Card\\ISAPI1.dll")]
private static extern string getDataFromTable(byte[] tablename);
static void Main(string[] args)
{
string str = getDataFromTable(byteArray);
Console.writeLine(str);
}

调用时出错。我正在为 WinCE 6.0 创建这个

已编辑------------------------

是否有类似的东西,我可以从 C# 向 C++ 传递一个空缓冲区,C++ 函数将填充数据,我可以在 C# 中重用它

最佳答案

最近我也遇到了这个问题,虽然我有一个解决方案给你,遗憾的是我无法真正解释它。我还没有找到合理的解释。

我用于检索字符串的 C++ 代码是:

extern "C" { __declspec(dllexport) void __GetValue__(char* str, int strlen); }

和我的 C# 代码:

[DllImport("MyDLL.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void __GetValue__(StringBuilder str, int strlen);

如您所见,您可以提供一个字符串(通过使用 StringBuilder)并让 C++ 像这样填充数据,而不是返回一个值:

void __GetValue__(char* str, int strlen) {
std::string result = "Result";

result = result.substr(0, strlen);

std::copy(result.begin(), result.end(), str);
str[std::min(strlen-1, (int)result.size())] = 0;
}

为了完整性,请求字符串的 C# 代码:

public String GetValue() {
StringBuilder str = new StringBuilder(STRING_MAX_LENGTH);

__GetValue__(str, STRING_MAX_LENGTH);

return str.ToString();
}

关于c# - 从 c# 调用的 c++ dll 导出函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991274/

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