Ver Mensaje Individual
  #3  
Antiguo 27-04-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Reputación: 0
mar646 Va por buen camino
Perdona por no explicarme bien. Mira: tengo una dll que me dio el fabricante de una capturadora de video. Esta dll tiene la dll en si y un archivo de cabecera en c++ (creo que este tipo de dll hace uso de MFC). No puedo usar directamente esta dll porque contiene una estructura en la que usa la palabra reservada de delphi 'set'. Al ocurrirme esto, pensé en hacer una dll para que me sirva de interfaz entre la del fabricante y mi aplicación. Pues bien, todas la funciones funcionan perfectamente excepto la siguiente:

typedef void ( __cdecl __RPC_FAR *CAPTURECALLBACK )(
DWORD channel,
BYTE __RPC_FAR *pBuffer,
DWORD nBufLen,
BYTE bStatus);

AVSAPI AVSERR AVS_SetCapCallback(CAPTURECALLBACK pCallback);

Esta función, según entiendo yo, se le pasa un puntero a una función con los parámetros definidos en el tipo de arriba. Mi idea es la de asignar una función hecha en delphi para poder controlar esta función. Para ello:

// declaración de tipo (lo de los parámetros al revés es por la documentación de la ayuda de delphi)
Callback = procedure(prStatus: Byte; prBufferLen: DWORD; prBuffer: PByte; prCanal: DWORD); cdecl;
pCallback = ^Callback;

// Definición de la función de la dll
function SetCapCallback(prCallback: pCallback): integer; stdcall;

// Definición de la función en la que quiero tratar la llamada
procedure CapCallBack(prStatus: Byte; prBufferLen: DWORD; prBuffer: PByte; prCanal: DWORD);

// Asignación de la función
SetCapCallback(@CapCallBack);

Una vez hecho esto, me salta la función CapCallBack, pero: 1º. Los parámetros no llegan bien (cosas raras); 2º. Al salir de la función da un error de memoria.

¿Alguna idea? Supongo que no estaré llamando bien a la función o estaré haciendo algo malamente. Gracias.
Responder Con Cita