Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error compilación de un callback

Estas en el tema de Error compilación de un callback en el foro de C/C++ en Foros del Web. Hola, aquí mi problema/duda: en una clase A tengo un método: LRESULT CALLBACK A::WndprocMain(HWND hwnd, UINT message, WPARAM wp, LPARAM lp); Lo implemento y desde ...
  #1 (permalink)  
Antiguo 10/05/2007, 08:23
 
Fecha de Ingreso: septiembre-2004
Mensajes: 17
Antigüedad: 19 años, 7 meses
Puntos: 0
Error compilación de un callback

Hola,

aquí mi problema/duda:

en una clase A tengo un método:

LRESULT CALLBACK A::WndprocMain(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);

Lo implemento y desde el constructor de esta propia clase A llamo a este método:

A::A(){

WndprocMainBackup = (WNDPROC)SetWindowLong(plugin.hwndParent, GWL_WNDPROC, (LONG)WndprocMain);
}

Donde WndprocMainBackup es un atributo WNDPROC de la propia clase A.

Pues en esa llamada al método desde el constructor, tengo un error de compilación:

"aggregate value used where an integer was expected"

El error es en el último parámetro que paso al método en el constructor, (LONG)WndprocMain.

He probado de hacerlo sin que el método pertenezca a una clase, (estoy haciendo una DLL), y sí que compila, pero necesito hacerlo dentro de una clase.

¿Alguien podría decirme qué estoy haciendo mal?

Muchas gracias.
  #2 (permalink)  
Antiguo 10/05/2007, 10:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Error compilación de un callback

El callback (WndprocMain) tiene que ser estatico (o no pertenecer a la clase) ya que su convencion de llamada es __stdcall (fijate que es CALLBACK) y los metodos de las clases usan otra convencion de llamada (__thiscall salvo con lista de parametro variable). Se usa este tipo de convencion de llamada ya que los metodos necesitan que se les pase la direccion del objeto sobre el cual van a trabajar.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 10/05/2007, 12:06
 
Fecha de Ingreso: septiembre-2004
Mensajes: 17
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Error compilación de un callback

Gracias por responder Eternal Idol.

Entonces, si el método ha de ser estático para contenerlo en la clase, ¿la única manera de acceder a los atributos de la instancia de la clase que utilizaré (que es la razón por la que quiero que esté en una clase, además de porque la clase es un Thread y quiero que esté dentro del thread) es haciendo un:

A *referencia_de_A = reinterpret_cast<A *>(lparam);

dentro del método de callback? No sé si ese tipo de cast es una buena práctica o si en este caso hay una mejor forma de implementarlo.

Gracias de nuevo.
  #4 (permalink)  
Antiguo 10/05/2007, 12:17
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Error compilación de un callback

Es lo que se hace normalmente, un casting, en este caso me parece que tendrias que usar Set/GetWindowLong con por ejemplo GWL_USERDATA. lParam depende del tipo de mensaje.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:00.