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:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_CREATE:
Button1 = CreateWindow("Button", "Child", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
10, 80, 80, 40, hwnd, (HMENU)ID_BUTTON,
hInstance, NULL);
break;
case WM_COMMAND:
if(LOWORD(wParam)==ID_BUTTON)
{
CreateChildWindow(); // В этой функции создается дочернее окно
}
break;
case WM_NCACTIVATE:
wParam = isActive;
return DefWindowProc (hwnd, message, wParam, lParam);
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Lo hago de la siguiente manera:
Código COBOL:
*****************************************
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 LNK-HWND BINARY-LONG.
01 LNK-MSG PIC 9(9) COMP-5.
01 LNK-WPARAM BINARY-LONG.
01 LNK-LPARAM BINARY-LONG.
01 LNK-RESULT BINARY-LONG.
PROCEDURE DIVISION WITH STDCALL LINKAGE
USING LNK-HWND LNK-MSG LNK-WPARAM LNK-LPARAM
RETURNING LNK-RESULT.
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.