Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
Dll y funciones

Hola a todos. Os explico mi problema a ver si alguien me puede ayudar. Programo en Delphi 5 bajo windows XP. Me he tenido que hacer una dll en visual c++ (MFC) para poder acceder a una capturadora de video. El caso es que dentro de la dll tengo un objeto que hace el tratamiento de la capturadora. Fuera del objeto hay una función que es asociada al objeto y que salta cada vez que la capturadora manda una imagen (no tengo mucha idea de c++ pero supongo que esta función es estática). En delphi no tengo ningún problema en usar las funciones del objeto y todo va perfectamente. El problema es que yo necesito en delphi el poder tratar esa función. He tratado de generar una función (callback) para que salte cada vez que llega la foto pero me da una violación de acceso. Lo que me gustaría es poder tratar esa función en delphi, ya que uno de sus parámetros es un puntero a byte que contiene la imagen de la capturadora.

¿Alguna idea sobre este tema? ¿Puede ser problema de memoria entre la dll y mi aplicación delphi? He visto algo de poder compilar con run-time (ya que la dll y la aplicación usarían el mismo espacio de memoria) ¿Sabéis algo sobre este tema?

De antemano muchas gracias.
Responder Con Cita
  #2  
Antiguo 27-04-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Sería bueno que subas algo de documentación.. digamos, como pide la DLL que sea la dichosa función de callback!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 27-04-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:45:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi