我想將一個傳遞byte[]給采用IntPtrC#中的Parameter 的方法,這可能嗎?如何?
3 回答

汪汪一只貓
TA貢獻1898條經(jīng)驗 獲得超8個贊
不確定是否要將IntPtr放入數(shù)組,但是可以使用Mashal.Copy復(fù)制數(shù)據(jù)以供非托管代碼使用:
IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);
// Call unmanaged code
Marshal.FreeHGlobal(unmanagedPointer);
另外,您可以聲明具有一個屬性的結(jié)構(gòu),然后使用Marshal.PtrToStructure,但這仍然需要分配非托管內(nèi)存。
編輯:另外,正如Tyalis指出的,如果不安全的代碼是您的選擇,那么您也可以使用固定的代碼

慕神8447489
TA貢獻1780條經(jīng)驗 獲得超1個贊
其他方式,
GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
// Do your stuff...
pinnedArray.Free();
- 3 回答
- 0 關(guān)注
- 1046 瀏覽
添加回答
舉報
0/150
提交
取消