Ver Mensaje Individual
  #1
Antiguo 11 de marzo de 2015, 10:32
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207
Afirmación CALLBACK WindowProc
0 Inactivo Inactivo

Hola a todos. Ya puse un post sobre este asunto en el otro foro, pero no he logrado desde entonces arreglar el tema.

Estoy intentando crear una funcion COBOL para imitar/sustituit o lo que es lo mismo hacer subclassing de CallWindoProc. Para ello hay que simular algo asi:

Código CPP:
  1. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.     switch (message)                  /* handle the messages */
  4.     {
  5.         case WM_CREATE:
  6.             Button1 = CreateWindow("Button", "Child", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  7.                                    10, 80, 80, 40, hwnd, (HMENU)ID_BUTTON,
  8.                                    hInstance, NULL);
  9.             break;
  10.         case WM_COMMAND:
  11.             if(LOWORD(wParam)==ID_BUTTON)
  12.             {
  13.                 CreateChildWindow(); // В этой функции создается дочернее окно
  14.             }
  15.             break;
  16.  
  17.         case WM_NCACTIVATE:
  18.             wParam = isActive;
  19.             return DefWindowProc (hwnd, message, wParam, lParam);
  20.  
  21.         case WM_DESTROY:
  22.             PostQuitMessage (0);
  23.             break;
  24.         default:
  25.             return DefWindowProc (hwnd, message, wParam, lParam);
  26.     }
  27.     return 0;
  28. }

Lo hago de la siguiente manera:

Código COBOL:
  1. *****************************************
  2.  WORKING-STORAGE SECTION.
  3.  LINKAGE SECTION.
  4.  01  LNK-HWND                   BINARY-LONG.
  5.  01  LNK-MSG                    PIC 9(9) COMP-5.
  6.  01  LNK-WPARAM                 BINARY-LONG.
  7.  01  LNK-LPARAM                 BINARY-LONG.
  8.  
  9.  01  LNK-RESULT                 BINARY-LONG.
  10.  
  11.  PROCEDURE DIVISION WITH STDCALL LINKAGE
  12.  USING LNK-HWND LNK-MSG LNK-WPARAM LNK-LPARAM  
  13.  RETURNING LNK-RESULT.
  14.          
  15.      CALL "CallWindowProcA" WITH STDCALL ...

Pero no recibe los parametros bien y no logro entender por que. A veces recibe los recibe, pero solo 1 campo por cada llamada y no los 4 a la vez, y encima lo hace casi siempre en el primer campo, otras veces no recibe nada...

En teoria llamamos al WinAPI con STDCALL y va bien, o sea que en teoria deberia funcionar bien con WITh stdcall en PROCEDURE pero no se por que no funciona...
A lo mejor alguna opcion de compilacion? He mirado el manual pero no he visto nada que pueda cambiar algo en esto.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita