外部CDLLから以下を呼び出すと、AccessViolationExceptionが発生し続けます。
short get_device_list(char ***device_list, int *number_of_devices);
DLLImport宣言を次のように設定します。
[DLLImport("mydll.dll")]
static public extern short get_device_list([MarshalAs(UnmanagedType.LPArray)] ref string[] devices, ref int number_of_devices);
私のC#アプリケーションコード:
{
string[] devices = new string[20];
int i = 0;
short ret = 0;
ret = get_device_list(ref devices, ref i); // I receive the AccessViolation Exception here
// devices[0] = "2255f796e958f7f31a7d2e6b833d2d426c634621" which is correct.
}
例外を受け取りましたが、デバイス配列は接続されたデバイスの2つのUUIDで正しく満たされます(また、サイズ= 2にサイズ変更されます。iも2です;)。
なにが問題ですか?
PS:長い研究の後、私も試しました:
[DLLImport("mydll.dll")]
static public extern short get_device_list(ref IntPtr devices, ref int number_of_devices);
と
{
IntPtr devices = new IntPtr();
int i = 0;
short ret = 0;
ret = get_device_list(ref devices, ref i); // No AccessViolation Exception here
string b = Marshal.PtrToStringAuto(devices); // b = "歀ׄ", which is incorrect
}
しかし、それは私を助けませんでした。
前もって感謝します!