为了账号安全,请及时绑定邮箱和手机立即绑定

如何从C#中的byte []获取IntPtr

如何从C#中的byte []获取IntPtr

呼唤远方 2019-11-11 10:27:33
我想将一个传递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指出的,如果不安全的代码是您的选择,那么您也可以使用固定的代码


查看完整回答
反对 回复 2019-11-11
?
慕神8447489

TA贡献1780条经验 获得超1个赞

其他方式,


GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);

IntPtr pointer = pinnedArray.AddrOfPinnedObject();

// Do your stuff...

pinnedArray.Free();


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 1000 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信