【发布时间】:2018-02-09 06:14:14
【问题描述】:
尽管有这么多问题,我还是找不到合适的答案。
我的目标是使用返回 char** 的 DLL 填充 string[]。
DLL 声明:
extern "C" SHTSDK_EXPORT int GetPeerList(SHTSDK::Camera *camera, int* id, int id_size, char** name, int name_size, int* statut, int statut_size);
我的导入:
[DllImport(libName)]
static public extern int GetPeerList(IntPtr camera, IntPtr id, int id_size, IntPtr name, int name_size, IntPtr statut, int statut_size);
我在 C# 代码中的使用:
StringBuilder[] name = new StringBuilder[nbPeer];
for (int i = 0; i < nbPeer; i++)
{
name[i] = new StringBuilder(256);
}
//Alloc peer name array
GCHandle nameHandle = GCHandle.Alloc(name, GCHandleType.Pinned);
IntPtr pointeurName = nameHandle.AddrOfPinnedObject();
int notNewConnection = APIServices.GetPeerList(cameraStreaming, pointeurId,
nbPeer, pointeurName, nbPeer, pointeurStatut, nbPeer);
// Now I'm supposed to read string with name[i] but it crashes
我错过了什么?我真的搜索了其他主题,我认为this one 可以工作,但仍然崩溃。
谢谢。
【问题讨论】:
-
我建议制作一个混合程序集(带有 cli 支持的可视化 C++)并将其用作本机 (C++) 函数的包装器。这比您现在所做的要容易得多。