我想将一个传递byte[]给采用IntPtrC#中的Parameter 的方法,这可能吗?如何?
3 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
不确定是否要将IntPtr放入数组,但是可以使用Mashal.Copy复制数据以供非托管代码使用:
IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);
// Call unmanaged code
Marshal.FreeHGlobal(unmanagedPointer);
另外,您可以声明具有一个属性的结构,然后使用Marshal.PtrToStructure,但这仍然需要分配非托管内存。
编辑:另外,正如Tyalis指出的,如果不安全的代码是您的选择,那么您也可以使用固定的代码
慕神8447489
TA贡献1780条经验 获得超1个赞
其他方式,
GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
// Do your stuff...
pinnedArray.Free();
- 3 回答
- 0 关注
- 1000 浏览
添加回答
举报
0/150
提交
取消