【发布时间】:2013-04-04 08:42:28
【问题描述】:
我正在使用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)
除非我有严重的脑力衰竭(诚然,这对我来说相当常见),否则在我看来它应该可以工作。
但是,我得到的双精度值完全不正确,我认为这是因为内存使用不正确。我查了一下,我认为 C# 和 C++ 中的双打在大小上是相同的,但也许这里还有其他问题。让我感到不适的一件事是 Marshal.Copy 从未被告知它应该期望什么类型的数据,但我读到它应该以这种方式使用。
任何线索,有人吗?如果需要,我可以发布正确的结果和返回的结果。
【问题讨论】:
标签: c# c++ types double pinvoke