我正在尝试从 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# 中重用它
原文由 Rawat 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个怎么样(注意,它假设正确的长度 - 你应该传入缓冲区长度并防止溢出等):
然后在 C# 中:
请注意,这确实对您的 C++ 应用程序中的字符编码不是 unicode 做出了一些假设。如果它们是 unicode,请使用 UTF16 而不是 ASCII。