我想从C++ dll导出函数返回一个字符串。我从c#调用这个函数。我在互联网上看到了很多例子,我很困惑该怎么做。从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
EDITED创建这个------------------------
有什么样的,我可以通过一个空从C#缓冲区到C++和C++函数将填充数据,我可以在C#中重复使用它
什么是错误? – Tobbe
在console.writeLine的OutOfMemory异常(字符串值) – Rawat
当然,没有人打算再次调用delete []来释放字符串缓冲区空间。最终以OOM结束。你不能这样做。首先尝试CoTaskMemAlloc()。接下来通过允许调用者提供缓冲区,如int getDataFromTable(char * tableName,char * buffer,int buflen)来实现。必须是具有足够容量的C#端的StringBuilder。 –