c# winapi callback marshalling intptr

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.