Código
//--------------------------------------------------------------------------- class a { private: WNDPROC lpPrevProc; LRESULT CALLBACK NewProc(HWND, UINT, WPARAM, LPARAM); public: void Hookea (HANDLE); ... }; //--------------------------------------------------------------------------- void a::Hookea (HANDLE hWnd) { lpPrevProc = (WNDPROC)GetWindowLong((HWND__*)hWnd, GWL_WNDPROC); SetWindowLongA((HWND__*)hWnd, GWL_WNDPROC, (DWORD)NewProc); // E2235 Member function must be called or its address taken Compiler error // Probe con "(DWORD)&a::RealWinWndProc" pero me dice // E2031 Cannot cast from 'type1' to 'type2' Compiler error } //--------------------------------------------------------------------------- LRESULT CALLBACK a::NewProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_DESTROY: MessageBox(hwnd, "Adios Mundo", "Bye!!!", MB_ICONINFORMATION); break; } return CallWindowProc(lpPrevProc, hwnd, uMsg, wParam, lParam); } //---------------------------------------------------------------------------
Alli estan los errores comentados que me tira el compilador, pero no entiendo el por que, pues he visto algun ejemplo en VC++ y justamente se hace esto:
Código
SetWindowLongA(hWnd, GWL_WNDPROC, (DWORD)(&a::NewProc));
Pero cuando lo paso al CBuilder e intento compilar me sale con que:
E2031 Cannot cast from 'long (__stdcall a::*)(HWND__ *,unsigned int,unsigned int,long)' to 'unsigned long'
Ahora, si hago lo mismo, pero programando estructuradamente, o sea, sin clases, no hay problemas y me coge la linea de la siguiente forma sin quejarse:
Código
SetWindowLongA((HWND__*)hWnd, GWL_WNDPROC, (DWORD)NewProc);
Mi pregunta, como puedo obtener el puntero al metodo a::NewProc para poder pasarlo como parametro en SetWindowLong como DWORD???, que estoy haciendo mal o que me falta por hacer???
Agradeceria cualquier ayuda al respecto, de verdad que esto ya me esta dando dolores de cabeza.
Gracias por leer
Saludos