Erste ein IntPtr zu einer ulong Variable in C #
Frage
Ich brauche einen IntPtr zu IStream.Read passieren, und die IntPtr auf eine ulong Variable anweisen. Wie bekomme ich diese IntPtr, die auf meine ulong Variable Punkte?
Lösung
Der beste Weg ist, um die IStream-Definition zu ändern:
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
int cb, /*IntPtr*/ ref int pcbRead);
Dann können Sie schreiben
int pcbRead = 0;
Read(..., ref pcbRead);
Andere Tipps
Ich glaube, Sie die GCHandle Methode verwenden, wenn Sie unsicher Code vermeiden wollen. Ich bin nicht sicher, wie das funktioniert mit boxed Werttypen.
var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()
Wenn Sie unsicher Code nicht versuchen, die folgende verwenden können.
var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);
Irgendwann später, müssen Sie Marshal.FreeHGlobal auf dem „ptr“ Wert nennen.
var pointer = new IntPtr(&myVariable);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow