Zunächst einmal, warum das nicht funktioniert. Verwaltete Handle-Typen ^
sind keine Zeiger. Sie sind nicht nur Adressen. Eine Instanz eines verwalteten Typs kann und wird in den Speicher verschoben von GC, so dass Adressen nicht stabil sind; daher würde es nicht zulassen, dass Sie eine solche Besetzung (wie GC kann jederzeit ausgeführt werden, und Sie wissen nicht, wann, jeder Versuch, eine solche Adresse als Rohwert zu verwenden ist von Natur aus eine Race Condition).
Eine andere Sache, die oft empfohlen wird, aber nicht wirklich funktioniert, ist Object.GetHashCode()
. Zum einen liefert es eine int
, offensichtlich nicht genug, um auf x64 einzigartig zu sein. Außerdem garantiert die Dokumentation nicht, dass die Werte eindeutig sind, und das sind sie auch in 2.0+ nicht.
Die einzige funktionierende Lösung ist die Erstellung einer Instanz von System.Runtime.InteropServices.GCHandle
für Ihr Objekt, und übertragen Sie es dann auf IntPtr
- die garantiert einzigartig und stabil ist.