尽管存在所有问题,但我找不到合适的答案。将char **从C++ DLL接收到C#string []
我的目标是填充一个string[]
配合使用,它返回一个char**
一个DLL的。
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支持的visual C++),并将其用作本机(C++)函数的包装。这比你现在做的要容易得多。 –
也许它可能有帮助吗? https://stackoverflow.com/questions/11508260/passing-stringbuilder-to-dll-function-expecting-char-pointer#11509815 – R2RT