簡體   English   中英

如何在C#對象上獲取非托管指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM