PInvoke
C# プログラムから C++ 関数を呼び出すために使用しています。コードは次のようになります。
IntPtr data = Poll(this.vhtHand);
double[] arr = new double[NR_FINGERS /* = 5 */ * NR_JOINTS /* = 3*/];
Marshal.Copy(data, arr, 0, arr.Length);
Poll()
の署名は次のようになります。
[DllImport("VirtualHandBridge.dll")]
static public extern IntPtr Poll(IntPtr hand);
C 関数Poll
の署名:
extern "C" __declspec(dllexport) double* Poll(CyberHand::Hand* hand)
私が大きな脳障害を抱えていない限り (確かに、私にとってはかなり一般的です)、これは機能しているように見えます.
ただし、取得している double 値は完全に正しくありません。これは、メモリ使用量が正しくないためだと思います。調べてみたところ、C# と C++ の double のサイズは同じだと思いますが、ここで別の問題が発生している可能性があります。私を間違った方向にこすっていることの 1 つは、Marshal.Copy
どのタイプのデータが期待されるべきかが決して伝えられないことですが、このように使用されることになっていることを読みました。
手がかりはありますか?必要に応じて、正しい結果と返された結果を投稿できます。