Conseguir una IntPtr a una variable ulong en C #
Pregunta
Necesito pasar una IntPtr a IStream.Read y el IntPtr debería apuntar a una variable ulong. ¿Cómo consigo este IntPtr que apunta a la variable ulong?
Solución
La mejor manera es cambiar la definición IStream:
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
int cb, /*IntPtr*/ ref int pcbRead);
A continuación, puede escribir
int pcbRead = 0;
Read(..., ref pcbRead);
Otros consejos
Creo que usted tiene que utilizar el método GCHandle si se quiere evitar código no seguro. No estoy seguro de cómo esto funciona con los tipos de valor en caja.
var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()
Si no puede utilizar código no seguro intente lo siguiente.
var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);
En algún momento más adelante, tendrá que llamar Marshal.FreeHGlobal en el valor "ptr".
var pointer = new IntPtr(&myVariable);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow