我發現許多方式從byte[]
得到一個IntPtr
的,所有這些我能成功地傳遞到外部非託管代碼得到一個非零IntPtr的,但只有如果我在堆棧上分配byte[]
。試圖在byte[]
實例變量上做同樣的事情,我得到了一個null
(IntPtr.Zero
)的結果,無論採用哪種方法獲得我選擇的IntPtr
。在這種情況下,我還沒有發現任何關於實例變量是否與堆棧中分配的值不同的信息。似乎無法從一個byte []實例變量
這裏是我想用它來獲取有效的IntPtr
到byte[]
實例變量是什麼:
GCHandle pinned = GCHandle.Alloc(outBytes, GCHandleType.Pinned);
IntPtr ptr = pinned.AddrOfPinnedObject();
// Always true, for reasons I'm unaware.
if (ptr == IntPtr.Zero) {}
pinned.Free();
謝謝!
通過「在堆棧上」你的意思是用'stackalloc'? –
我的意思是在本地範圍聲明一個byte [],就像這樣:'byte [] outBytes = new byte [GetNumBytes()]''。考慮到我正在使用'new',我的術語可能不正確。 –
你可以給一個代碼示例,這不起作用嗎?它是一個全球陣列嗎?對象的成員?傳入函數的引用? –