C# 调用 C++ dll 指针数组

文章介绍了如何在C#和C++之间有效地传递动态数组指针,并在C++中对数据进行读写操作。通过使用DllImport、Marshal类以及内存分配函数,实现了C#结构体到C++的转换和数据交换。在完成后,使用PtrToStructure方法将C++修改的数据转换回C#结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值