[Duda] CallBack

Iniciado por BlackZeroX, 15 Enero 2011, 01:43 AM

0 Miembros y 1 Visitante están viendo este tema.

BlackZeroX

.
Puedo redirigir un proceso por medio de funciones normales, pero lo que realmente quiero es redirrecionar a un miembro (una funcion) dentro de la clase, pero me marca error.

Como se puede hacer un CallBack a un miembro( Funcion ) de una clase?.


/* Con y sin & me marca error */
/* Intento cambiar el proceso que resive los mensajes de "this->v_hWinSock" a otro proceso/mienbro de una clase */
this->v_PrevProc = SetWindowLongA( this->v_hWinSock , GWL_WNDPROC, (DWORD)&this->WndProc);


Dulces Lunas!¡.
.
The Dark Shadow is my passion.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

BlackZeroX

#2
.
Es similar pero no me da solución, ya que no le puedo pasar cualquier cosa a este redirrecionamiento que busco es solo cambiar el CallWindowProc de una ventana creada con CreateWindowsEX. a un miembro (funcion) de una clase siendo la misma clase en su constructor cuando se creo la ventana y despues como ya dije redirrecionar los mensajes entrantes de esta ventana a el miembro de la funcion en cuention.

CreateWindowEx + SetWindowLong + GWL_WNDPROC



LONG WINAPI SetWindowLong(
 __in  HWND hWnd,
 __in  int nIndex,
 __in  LONG dwNewLong
);



Este es el proceso... que resive los mensajes.



LRESULT CALLBACK cls_socket::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 ... Codigo
}



P.D.: Usare una solucion cutre haber que tal me va.

Dulces Lunas!¡.
.
The Dark Shadow is my passion.

Eternal Idol

No se puede usar un metodo comun, tiene que ser estatico por la convencion de llamada, CALLBACK es un alias de __stdcall y esta convencion no pasa el puntero this. Podrias GWL_USERDATA para escribir y leer el puntero al objeto ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

BlackZeroX

#4
.
Esto ya esta solucionado con GWL_WNDPROC+GWL_USERDATA me las apañare perfectamente inclusive quitare ese feo vector con ese feo For.

Dulces Lunas!¡.
The Dark Shadow is my passion.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

ThunderCls

Cita de: BlackZeroX▓▓▒▒░░ en 17 Enero 2011, 10:06 AM
.
Esto ya esta solucionado con GWL_WNDPROC+GWL_USERDATA me las apañare perfectamente inclusive quitare ese feo vector con ese feo For.

Dulces Lunas!¡.

Hola BlackZeroX▓▓▒▒░░, hace un tiempo tuve el mismo problema y busque en cada rincon y en cada foro que pude, pero las soluciones que encontre no me sirvieron, al final deje a un lado lo que intentaba hacer por si me surgia alguna solucion. Por lo que leo, al final sabes como lograrlo. Podias exponer el metodo que usastes en algo de codigo y asi ver si asi saco esta espina que tengo :(
Saludos y gracias de antemano ;)
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

Eternal Idol

¿Te referis a esto?
https://foro.elhacker.net/programacion_cc/c_ayuda_con_esta_clase-t311243.0.html

La solucion es la misma que te dieron en ese hilo, si queres usar la clase entonces el metodo tiene que ser estatico (como dije en este mismo hilo para pasar el puntero this podes usar GWL_USERDATA). Lee todo con atencion, incluidos los enlaces e hilos relacionados.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

ThunderCls

Cita de: Eternal Idol en 17 Enero 2011, 17:57 PM
¿Te referis a esto?
https://foro.elhacker.net/programacion_cc/c_ayuda_con_esta_clase-t311243.0.html

La solucion es la misma que te dieron en ese hilo, si queres usar la clase entonces el metodo tiene que ser estatico (como dije en este mismo hilo para pasar el puntero this podes usar GWL_USERDATA). Lee todo con atencion, incluidos los enlaces e hilos relacionados.

Eternal Idol, recuerdo haber leido la respuesta de Littlehorse, pero al final me parece que no pude lograr hacerlo como queria, igual deberia seguir intentandolo y leyendo, aunque bueno...un pedacito de codigo sencillo como el ejemplo que puse en ese hilo, pero funcional, no me vendria mal, por eso le pedi algun ejemplo a BlackZeroX▓▓▒▒░░ que al parecer lo consiguio en su codigo.
De todas formas gracias por responder  ;-)
Saludos
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

Eternal Idol

En los enlaces hay varios ejemplos. Lo unico que tenes que hacer es declarar el metodo como estatico, llamar a Set/GetWindowLong con GWL_USERDATA y hacer algun casting.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón