我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-functionPoll
的签名:
extern "C" __declspec(dllexport) double* Poll(CyberHand::Hand* hand)
除非我有严重的脑力衰竭(诚然,这对我来说相当普遍),否则这在我看来应该是可行的。
但是,我得到的双精度值完全不正确,我认为这是因为内存使用不正确。我查了一下,我认为 C# 和 C++ 中的双打在大小上是相同的,但也许这里还有其他问题。让我感到不适的一件事是,Marshal.Copy
它从未被告知它应该期望什么类型的数据,但我读到它应该以这种方式使用。
任何线索,有人吗?如果需要,我可以发布正确的结果和返回的结果。