エクスポートされた C++ DLL から C# プログラムに配列を返す方法がわかりません。グーグルで見つけた唯一のことは、Marshal.Copy() を使用して配列をバッファーにコピーすることでしたが、それでは返そうとしている値が得られず、何を与えているのかわかりません。
これが私が試してきたことです:
エクスポートされた関数:
extern "C" __declspec(dllexport) int* Test()
{
int arr[] = {1,2,3,4,5};
return arr;
}
C#部分:
[DllImport("Dump.dll")]
public extern static int[] test();
static void Main(string[] args)
{
Console.WriteLine(test()[0]);
Console.ReadKey();
}
マネージド/アンマネージドの違いにより、戻り値の型 int[] がおそらく間違っていることはわかっていますが、ここからどこに行くべきかわかりません。整数配列ではなく、文字配列を文字列に返す以外に答えが見つからないようです。
Marshal.Copy で取得している値が返された値ではない理由は、エクスポートされた関数の 'arr' 配列が削除されるためだと考えましたが、誰かがこれをクリアできるかどうかは 100% 確信が持てません。それは素晴らしいことです。