• Sábado 14 de Diciembre de 2024, 11:52

Autor Tema:  Funciones Objeto  (Leído 880 veces)

Soforo

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Funciones Objeto
« en: Jueves 31 de Mayo de 2007, 08:55 »
0
Hola a todos:

Mi problema es el siguiente: tengo en una DLL una función

  void initBT(void (*dataIndication) (void* buff, int size), void (*n_con_ind) (), void (  *n_discon_ind) ())
  {
   handlerDataInd = dataIndication;
   conBtInd = n_con_ind;
   disconBtInd = n_discon_ind;
  }

donde los valores de la izquierda son:

extern void (*handlerDataInd) (void* buff, int size);
extern void (*conBtInd) ();
extern void (*disconBtInd) ();

Es decir, a cada puntero a función en initBT se le asigna el que le viene como parámetro.

Esta función la usa un programa que linka esta DLL. Mediante la siguiente función le quiero pasar las funciones como parametros a initBT para que asi la DLL sepa donde están esas funciones que pertenecen al main y no a la DLL.

    initBT (dataIndication, n_con_ind, n_discon_ind);

Pero me da el siguiente error:

  error C2664: 'initBT' : cannot convert parameter 1 from 'void (void *,int)' to 'void (__cdecl *)   (void *,int)'

Esta claro que no puedo inicializar asi la función initBT.

Creo que la solucion tiene algo que ver con funciones objeto pero no entiendo lo que son ni como deberia utilizarlas.

Alguien me puede ayudar???

Gracias de antemano

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funciones Objeto
« Respuesta #1 en: Jueves 31 de Mayo de 2007, 12:51 »
0
¿dataIndication tiene esta declaracion?

Código: Text
  1.  
  2. void dataIndication(void* buff, int size);
  3.  
  4.  

Por otro lado no tenes que usar extern para esas variables a menos que las vayas a enlazar estaticamente, si te compilara no las encontraria por ser simbolos externos.

Esto me compila, obviamente no es util pero si logras reducir a la minima expresion el codigo con este estilo seguramente te podremos ayudar mejor:

Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. void (*handlerDataInd) (void* buff, int size);
  5. void (*conBtInd) ();
  6. void (*disconBtInd) ();
  7.  
  8. void initBT(void (*dataIndication) (void* buff, int size), void (*n_con_ind) (), void ( *n_discon_ind) ())
  9. {
  10.   handlerDataInd = dataIndication;
  11.   conBtInd = n_con_ind;
  12.   disconBtInd = n_discon_ind;
  13. }
  14.  
  15. void dataIndication(void* buff, int size)
  16. {
  17. }
  18.  
  19. void n_con_ind() { }
  20.  
  21. void n_discon_ind() { }
  22.  
  23. void main()
  24. {
  25.   initBT (dataIndication, n_con_ind, n_discon_ind);
  26. }
  27.  
  28.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.