Foros - Stratos

Proyectos => Jad Engine => Mensaje iniciado por: Haddd en 18 de Marzo de 2005, 04:39:42 PM

Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: Haddd en 18 de Marzo de 2005, 04:39:42 PM
 Estoy itnetnando hacer un Wrapper de Newton. Por ahora, bien, pero al utilizar callbacks....

   public class NewtonWrapper
   {
       public delegate void SetTransformCB(int body, ref Matrix matrix);

       [DllImport("Newton.Dll")]
       public static extern void NewtonBodySetTransformCallback(int bodyPtr, SetTransformCB cb);
   }

Entonces en el código, hago:

           NewtonWrapper.SetTransformCB cb = new NewtonWrapper.SetTransformCB(PhysicsSetTransform);

                       NewtonWrapper.NewtonBodySetTransformCallback(boxBody,cb);


El problema está en que el metodo UpdateWorld de Newton me da un error de memoria corrupta.
Creo que es debido a que el delegado se libera por el garbage collector. ¿Cómo puedo evitar que eso ocurra ?


Muchas gracias.  (ole)  
Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: zupervaca en 19 de Marzo de 2005, 12:35:44 AM
 yo de c# cero patatero, lo unico que puedo decirte es que mires si antes de nada esa dll requiere algun tipo de inicializacion llamando a funciones, etc
Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: Haddd en 19 de Marzo de 2005, 11:45:05 PM
 Ya está resuelto. Resulta que en net 2.0 hay una forma de resolverlo  :D  
Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: ethernet en 20 de Marzo de 2005, 09:50:33 AM
 arg! pero pon la solución por si alguien tiene el mismo problema, nos dejas con la miel en los labios xDDD
Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: Haddd en 20 de Marzo de 2005, 10:18:18 AM
 Ahí va. Pero sólo funciona con 2.0

   [UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]
   public delegate void SetTransformCB(int body, ref Matrix matrix);

Como el callback se llama en la dll utilizando cdecl ( por defecto .net asume stdcall), y en 1.0 no hay forma de especificarlo, para la 2.0 han creado este "atributo".  
Título: Delegates Y Llamadas A Dll Desde C#
Publicado por: zupervaca en 20 de Marzo de 2005, 07:46:52 PM
 
CitarComo el callback se llama en la dll utilizando cdecl ( por defecto .net asume stdcall), y en 1.0 no hay forma de especificarlo, para la 2.0 han creado este "atributo".

jurr pues yo sin el __cdecl no puedo vivir (uoh)