Cobol - RMCOBOL Ver 7.

 
Vista:

RMCOBOL Ver 7.

Publicado por ignacio casasnovas (3 intervenciones) el 18/09/2001 12:26:24
Tengo una aplicación que utiliza la rutina Call MESSAGEBOX del API del Windows. Con Windows 95 funciona a la perfección, pero si se ejecuta en WINNT cuando devuelve el control al cobol queda bloqueada y es necesario resetear la aplicación para finalizar. La rutina es:
Programa Cobol....
INITIALIZE MESSAGE-BOX-FLAGS
SET MB-ICONEXCLAMATION TO TRUE
CALL MESSAGEBOX USING WIN-RETURN 0
" Texto mensaje" "Titulo" MESSAGE-BOX-FLAGS.
Programa Cobol continuación...
* En este punto al regresar de MESSAGEBOX se bloquea.

Agradeceré vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema con rutina Call MESSAGEBOX en Windows NT

Publicado por Alejandro (300 intervenciones) el 04/09/2023 18:41:45
1. Verificación de API Compatibility: El problema que estás experimentando puede deberse a diferencias en la forma en que Windows 95 y Windows NT manejan la rutina `CALL MESSAGEBOX` del API de Windows. Para solucionarlo, primero verifica que tu aplicación esté utilizando la versión correcta de la API para Windows NT. Asegúrate de que estás enlazando con las bibliotecas y las llamadas adecuadas para Windows NT.

2. Manejo de flags: La variable `MESSAGE-BOX-FLAGS` debe inicializarse correctamente antes de llamar a `MESSAGEBOX`. Asegúrate de que las banderas se establezcan adecuadamente para que el cuadro de diálogo de mensaje se comporte como se espera en Windows NT. Por ejemplo, puedes configurar `MB-ICONEXCLAMATION` y otras banderas según tus necesidades.

3. Control de flujo: Para evitar bloqueos, verifica el flujo de control después de llamar a `MESSAGEBOX`. Es posible que necesites capturar el resultado de la llamada y tomar decisiones basadas en eso. Asegúrate de que tu programa Cobol continúe ejecutándose de manera adecuada después de la llamada a `MESSAGEBOX`.

Aquí tienes un ejemplo de cómo podrías modificar tu código Cobol:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
IDENTIFICATION DIVISION.
PROGRAM-ID. MessageBoxExample.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MESSAGE-BOX-FLAGS       PIC 9(9) COMP VALUE 0.
01 WIN-RETURN              PIC S9(9) COMP VALUE 0.
01 MESSAGE-TEXT            PIC X(100) VALUE "Texto mensaje".
01 MESSAGE-TITLE           PIC X(100) VALUE "Titulo".
 
PROCEDURE DIVISION.
    INITIALIZE MESSAGE-BOX-FLAGS
    SET MB-ICONEXCLAMATION TO TRUE
    CALL 'USER32' USING WIN-RETURN
           'MessageBoxA'
           0
           MESSAGE-TEXT
           MESSAGE-TITLE
           MESSAGE-BOX-FLAGS
    IF WIN-RETURN = 0
        DISPLAY "MessageBox se ejecutó con éxito."
    ELSE
        DISPLAY "Error en la llamada a MessageBox. Código de error: " WIN-RETURN
    END-IF
 
    * Continúa con el resto de tu programa Cobol aquí...
 
STOP RUN.

Asegúrate de que estás utilizando la API de Windows NT adecuada y maneja los resultados de `MESSAGEBOX` para evitar bloqueos en tu aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar