【发布时间】:2014-12-02 19:13:08
【问题描述】:
我有一个 C++ DLL,它具有从设备发送数据的功能。从我的托管 C# 代码中,我调用 C++ 函数 positionCallback。这里注意位置。 pos 根据定义——是三个指针的数组,指向位置数组。
public void positionCallback(uint devNo,uint count,uint index,ref System.IntPtr pos,ref System.IntPtr mrk)
现在我的问题是我想提取这 3 个数组中的每一个的数据,但我只能获取数组 1 的数据,而其余 2 的数据我得到垃圾值。 下面是我正在尝试的代码
// Copy the unmanaged array to managed memory for Axis 2
IntPtr ptr2 = IntPtr.Add(pos,2*sizeof(Int64));
Marshal.Copy(pos,managedArrayAxis1,0,(int)count);
// Copy the unmanaged array to managed memory for Axis 2
Marshal.Copy(ptr2, managedArrayAxis2, 0, (int)count);
上面的代码只为 managedArrayAxis1 提供了正确的数据,但对于 managedArrayAxis2,垃圾数据正在收集。我是否错误地增加了 pos 的 IntPtr 地址?
请帮忙!
【问题讨论】:
-
你确定 Int64 是正确的吗?如果它应该是 int 并且您使用的是 Int64,那会导致问题。
-
Int32 也为 managedArrayAxis2 提供垃圾值。所以尝试了这两种东西。任何其他建议都会有所帮助!
-
您通过引用传递这些指针这一事实如何?我想这看起来像 c++ 库的 int** 。你确定这就是 c++ 方法要找的吗?
-
在 C++ 中它看起来像 static void positionCallback( unsigned int devNo, unsigned int count, unsigned int index, const double * const pos[3], const bln32 * const mrk[3] ),我是获取一组数组的数据,但对于另一组我得到垃圾。在指向正确的数组地址时看起来像“pos”,但 ptr2 无法指向正确的位置@pquest
-
为什么不使用 sizeof double?
标签: c# .net marshalling intptr