Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema funcion callback

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema funcion callback Responder citando

Buenas,

Tengo un problemita utilizando una funcion de una libreria de visual c++.
Cuando intento hacer la llamada desde mi programa en borland me da un
error al pasar el parámetro de la funcion callback.

Esta es mi contexto:

#typedef en el .h de la libreria
typedef int (*NEORE_PROGRESS_CB) (double percent, void* pUserData);

#funcion callback
int notify_fn(double percent, void* data)
{
//Código
return 0;
}

#llamada a funcion de libreria con callback por parametro
neoRE_SetProgressCB((neoHENGINE)hEngine,notify_fn, NULL);

Este es el error de compilación:

[BCC32 Error] Unit1.cpp(69): E2034 Cannot convert 'int (* (_closure )(double,void *))(double,void *)' to 'int (*)(double,void *)'

[BCC32 Error] Unit1.cpp(69): E2342 Type mismatch in parameter 'pCb' (wanted 'int (*)(double,void *)', got 'void')


Algún crack que me pueda ayudar, por favor???
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

El problema está en el tipo de la función callback. Sin poderlo probar lo que yo intentaría sería un cast del puntero a la función:
Código:

neoRE_SetProgressCB((neoHENGINE)hEngine, (NEORE_PROGRESS_CB)notify_fn, NULL);


Saludos.


Ultima edición por escafandra el Mar 02 Jun, 2009 8:20 pm, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

o Bien, puedes hacerlo de la siguiente manera

Código:
NEORE_PROGRESS_CB pToFunction; //declaramos una variable
pToFunction = &notify_fn; // asignamos la direccion de la funcion

y por ultimo, hacemos la llamada, de la manera que te indican.

Código:
neoRE_SetProgressCB((neoHENGINE)hEngine,  pToFunction , NULL);



Código:
typedef int (*NEORE_PROGRESS_CB) (double percent, void* pUserData);

Cabe aclarar que el typedef que estas usando declara un puntero a una funcion que recibe 2 parametros , por lo tanto la funcion pToFuncion debe llevarlos.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.