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)
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
Ya está resuelto. Resulta que en net 2.0 hay una forma de resolverlo :D
arg! pero pon la solución por si alguien tiene el mismo problema, nos dejas con la miel en los labios xDDD
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".
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)