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

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



呼唤远方
浏览 1001回答 3
3回答

汪汪一只猫

不确定是否要将IntPtr放入数组,但是可以使用Mashal.Copy复制数据以供非托管代码使用:IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);// Call unmanaged codeMarshal.FreeHGlobal(unmanagedPointer);另外,您可以声明具有一个属性的结构,然后使用Marshal.PtrToStructure,但这仍然需要分配非托管内存。编辑:另外,正如Tyalis指出的,如果不安全的代码是您的选择,那么您也可以使用固定的代码

慕神8447489

其他方式,GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);IntPtr pointer = pinnedArray.AddrOfPinnedObject();// Do your stuff...pinnedArray.Free();
打开App,查看更多内容
随时随地看视频慕课网APP