Recato53, lo que puedes hacer es pasar un puntero de una variable en tu DLL que será recuperado por el EXE en la CMD-LINE.
Es decir, en tu DLL defines una variable y llamas al EXE:
Código COBOL:
WORKING-STORAGE SECTION.
01 EXT-INDICADOR PIC X(2).
PROCEDURE DIVISION.
INVOKE POW-SELF "ExecuteSync" USING EXT-INDICADOR
IF EXT-INDICADOR = "SI"
INVOKE POW-SELF "DisplayMessage"
USING "¡Hay conexión!" 64
ELSE
INVOKE POW-SELF "DisplayMessage"
USING "¡NO hay conexión!" 48
END-IF
En tu EXE que comprueba la conexión, en la WORKING Global defines:
Código COBOL:
01 GLB-CMD IS GLOBAL PIC X(260).
01 FILLER REDEFINES GLB-CMD
05 PTR-VAR IS GLOBAL POINTER.
05 FILLER PIC X(256).
Y en el evento "Opened" haces lo siguiente:
Código COBOL:
MOVE "CommandLine" OF POW-SELF TO GLB-CMD
En el evento "Click" de tu botón que llama a la rutina de comprobación de la conexión, añades la LINKAGE SECTION y mapeas la variable de retorno. Ejemplo:
Código COBOL:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FUNC PIC X(20).
01 NUM1 PIC S9(9) COMP-5.
01 NUM2 PIC S9(9) COMP-5.
01 NUM3 PIC S9(9) COMP-5.
01 RESP PIC S9(9) COMP-5.
LINKAGE SECTION.
01 EXT-VARIABLE PIC X(2). *> <== VARIABLE COMPARTIDA
PROCEDURE DIVISION.
MOVE "mluser" TO FUNC
CALL FUNC WITH STDCALL USING BY VALUE NUM1
BY VALUE NUM2
BY VALUE NUM3
RETURNING RESP
SET ADDRESS OF EXT-VARIABLE TO PTR-VAR
IF RESP = ZEROS
MOVE "NO" TO EXT-VARIABLE
ELSE
MOVE "SI" TO EXT-VARIABLE
END-IF