我必须使用外部 DLL 将数据发送到设备。我在 DLL 中使用的方法将指向字节数组的指针作为参数。当我使用 C# 时,我使用 GCHandle.Alloc 方法来获取内存地址并将其分配给 IntPtr 实例。然后我将 IntPtr 作为参数传递。我担心代码中可能存在内存泄漏风险,因为我之前没有在 C# 中使用过指针和内存分配。该代码当前的工作方式如下所示:
GCHandle pinned = GCHandle.Alloc(byteArray, GCHAndleType.Pinned);
IntPtr arrayPtr = pinned.AddrOfPinnedObject();
var result = _externalDll.SendInfo(arrayPtr, byteArray.Length);
pinned.Free();
这是分配和使用 IntPtr 的正确方法吗?它似乎有效,但由于这将在生产机器上每天同时运行大约 100 次,我宁愿避免任何重大问题。