Мне надоело использовать Marshal.Copy
, Marshal.Read*
и Marshal.Write*
, поэтому мне было интересно, есть ли способ принудительного приведения неуправляемого указателя памяти (типа IntPtr
).
Примерно так:
IntPtr pointer = Marshal.AllocateHGlobal(sizeof(Foo));
Foo bar = (Foo)pointer;
bar.fooBar = someValue;
// call some API
Marshal.FreeHGlobal(pointer);
bar = null; // would be necessary?