一尘不染

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

c#

我想将一个传递byte[]给采用IntPtrC#中的Parameter 的方法,这可能吗?如何?


阅读 336

收藏
2020-05-19

共1个答案

一尘不染

不确定是否要将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指出的,如果不安全的代码是您的选择,那么您也可以使用 固定的 代码

2020-05-19