すべての質問にもかかわらず、これを行うには適切な答えが見つかりません。C++のDLLからC#の文字列を受け取る[]
私の目標はです。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
Whを私は逃した?私は実際に他のトピックを検索しましたが、私はthis oneがうまくいくと思っていましたが、まだクラッシュしていました。
ありがとうございました。
私は混合アセンブリ(cliサポート付きビジュアルC++)を作成し、これをネイティブ(C++)関数のラッパーとして使用することをお勧めします。あなたが今やったことよりずっと簡単です。 –
おそらくそれは役に立つかもしれませんか? https://stackoverflow.com/questions/11508260/passing-stringbuilder-to-dll-function-expecting-char-pointer#11509815 – R2RT