在C# 和 C++ 之间 传递动态数组指针, 并且在C++ 代码中对动态数组指针中的data 有读写的操作,对于主要用C++ 的朋友,可能较为痛苦, 这里给出 成功的代码。
主要学习了上面的文章
https://blog.youkuaiyun.com/jadeflute/article/details/5684687#
// 声明
[DllImport("Eagle_NT_ITF.dll", EntryPoint = "TEST", CallingConvention = CallingConvention.Cdecl)]
private static extern viod TEST(IntPtr pMsg);
HSCAN_MSG[] msg1 = new HSCAN_MSG[10];
for (int i = 0; i < msg1.Length; i++)
{
msg1[i] = new HSCAN_MSG();
msg1[i].pData = new byte[8];
}
IntPtr[] ptArray = new IntPtr[1];
ptArray[0] = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HSCAN_MSG)) * 10);
IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HSCAN_MSG)));
Marshal.Copy(ptArray, 0, pt, 1);
TEST(pt);
for (int j = 0; j < 10; j++)
{
msg1[j] = (HSCAN_MSG)Marshal.PtrToStructure((IntPtr)((UInt32)pt + j * Marshal.SizeOf(typeof(HSCAN_MSG))) , typeof(HSCAN_MSG));
}