C#- ¿Cómo convertir Object a IntPtr y viceversa?
winapi callback (1)
Quiero pasar un objeto del código administrado a una función de WinApi como IntPtr
. Devolverá este objeto a mi función de devolución de llamada en código administrado como IntPtr
. No es una estructura, es una instancia de una clase.
¿Cómo convierto object
a IntPtr
y viceversa?
Entonces, si quiero pasar una lista a mi función de devolución de llamada a través de WinApi, uso GCHandle
// object to IntPtr (before calling WinApi):
List<string> list1 = new List<string>();
GCHandle handle1 = GCHandle.Alloc(list1);
IntPtr parameter = (IntPtr) handle1;
// call WinAPi and pass the parameter here
// then free the handle when not needed:
handle1.Free();
// back to object (in callback function):
GCHandle handle2 = (GCHandle) parameter;
List<string> list2 = (handle2.Target as List<string>);
list2.Add("hello world");
Gracias a David Heffernan
Editar: Como se indicó en los comentarios, debe liberar el mango después de su uso. También utilicé el casting. Puede ser aconsejable usar los métodos estáticos GCHandle.ToIntPtr GCHandle.ToIntPtr(handle1)
y GCHandle.FromIntPtr(parameter)
como here . No lo he comprobado.