【发布时间】:2015-10-07 11:41:04
【问题描述】:
我正在尝试从 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# 中重用它
【问题讨论】:
-
console.writeLine 出现 OutOfMemory 异常(字符串值)
-
当然,没有人会调用 delete[] 来再次释放字符串缓冲区空间。最终以OOM结束。你不能这样做。首先尝试 CoTaskMemAlloc()。接下来允许调用者提供缓冲区,例如 int getDataFromTable(char* tableName, char* buffer, int buflen)。必须是 C# 端具有足够容量的 StringBuilder。
标签: c# c++ windows-ce