[英]How to get unmanaged pointer on an C# object?
我知道如何在struct上創建非托管指針。
但我希望有一個指向對象的非托管指針。
我已經知道我需要使用GC來保護對象
GCHandle.Alloc(...);
但我找不到定義指針的方法......
嘗試使用GCHandle.Alloc
和第二個參數GCHandleType.Pinned
。 方法GCHandle.AddrOfPinnedObject
也可能有用。
試試這兩個鏈接:
您可以固定這樣的實例:
GCHandle handle = GCHandle.Alloc(oldList, GCHandleType.Pinned);
假設它有效,那么您可以將固定對象的地址作為類型不可知的指針,如下所示:
IntPtr ptr = handle.AddrOfPinnedObject();
不要忘記在失去跟蹤之前顯式釋放句柄(否則對象將永久固定):
handle.Free();
請注意,我說“假設它有效” - 並非所有對象都可以固定,而那些不能在您嘗試固定它們時會拋出異常。
如果您想冒險獲取非固定對象的地址,可以使用System.Runtime.CompilerServices.Unsafe
嘗試這樣的操作:
static unsafe void* VeryUnsafeGetAddress(this object obj)
{
return *(void**)Unsafe.AsPointer(ref obj);
}
我想你對Marshal.StructureToPtr
感興趣。 我也建議閱讀這篇博文 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.