1

私が使用しているACライブラリには、charポインタの配列へのポインタを返す関数があります:

extern char** getIds();

使用例:

char **list, **list_save;
list_save = list = getIds();
while (list && *list)
{
    printf("Id: %s\n", *list);
    list++;
}
freeIds(list_save);

wherefreeIdsも C ライブラリからのもので、実行中に割り当てられたメモリを解放しますgetIds

.Net Interop アセンブリも提供していますが、関数はインポートされませんgetIds。相互運用アセンブリのソース コードにアクセスできます。

私のプログラムは C# で書かれているので、interop アセンブリにインポートを追加できるかどうか、それがどのように見えるべきか、関数を呼び出すために C# コードがどのように見える必要があるかを知りたいです。

dllインポートの私の推測は次のとおりです。

[DllImport("foo.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr getIds();

しかし、C# でそれを呼び出すことができなかったので、dll のインポートが正しいかどうかわかりません。

4

1 に答える 1

0

マーシャリングchar**をご覧ください。dllimportが機能するはずです。

于 2012-07-20T15:58:17.333 に答える