Iniciar Sesión

Ver la Versión Completa : [Sintaxis] llamar a aplication externa .EXE


hbetancur
28 de mayo de 2021, 17:45
Como llamar a una aplicacion externa .EXE y corra en un proceso independiente. Ejemplo llamar Notepad, Excel, etc. directamente desde windows netcobol sin usar powercobol. Hay alguna libreria externa o api pueda usar?. Algun ejemplo o guia en manual. He hecho toda clase de busqueda sin exito.

Kuk
28 de mayo de 2021, 23:50
@hbetancur, estás trabajando en NetCOBOL o en PowerCOBOL?

hbetancur
29 de mayo de 2021, 00:27
Estoy usando Netcobol v11. Quiero llamar un .exe sin usar powercobol.

---------- Post añadido : 22:27 ---------- Post anterior : 22:25 ----------

Perdon aclaro un poco mas. Con Netcobol quiero lanzar una aplicacion externa (.EXE) con proceso independiente del programa o aplicacion que la llama. Algo asi como lazar notepad o exc o word independientes.

Kuk
29 de mayo de 2021, 11:58
@hbetancur, échale un ojo a este post: [Sintaxis] CALL a programas externos en Windows 8 - COBOL Foro (https://www.cobolforo.es/showthread.php?t=245&p=1162)

---------- Post añadido : 11:58 ---------- Post anterior : 10:54 ----------

@hbetancur, NetCOBOL trae ejemplos (samples), de los cuales el SAMPLE32 muestra como hacerlo:


000010 @OPTIONS ALPHAL(WORD)
000020*=========================================== ======================
000030* This sample program demonstrates how to execute other programs
000040* and batch files.
000050*
000060*
000070* Copyright 2000-2010 FUJITSU LIMITED
000080*=========================================== ======================
000090 IDENTIFICATION DIVISION.
000100 PROGRAM-ID. SAMPLE32.
000110 DATA DIVISION.
000120 WORKING-STORAGE SECTION.
000130 01 ProcessInfo.
000140 02 prcinf01 PIC 9(9) COMP-5.
000150 02 prcinf02 PIC 9(9) COMP-5.
000160 02 prcinf03 PIC 9(9) COMP-5.
000170 02 prcinf04 PIC 9(9) COMP-5.
000180 01 StartupInfo.
000190 02 stainf01 PIC 9(9) COMP-5.
000200*
000210 02 stainf02 PIC 9(9) COMP-5.
000220 02 stainf03 PIC 9(9) COMP-5.
000230 02 stainf04 PIC 9(9) COMP-5.
000240*
000250 02 stainf05 PIC 9(9) COMP-5.
000260 02 stainf06 PIC 9(9) COMP-5.
000270 02 stainf07 PIC 9(9) COMP-5.
000280 02 stainf08 PIC 9(9) COMP-5.
000290 02 stainf09 PIC 9(9) COMP-5.
000300 02 stainf10 PIC 9(9) COMP-5.
000310 02 stainf11 PIC 9(9) COMP-5.
000320 02 stainf12 PIC 9(9) COMP-5.
000330 02 stainf13 PIC 9(4) COMP-5.
000340 02 stainf14 PIC 9(4) COMP-5.
000350 02 stainf15 PIC 9(9) COMP-5.
000360*
000370 02 stainf16 PIC 9(9) COMP-5.
000380 02 stainf17 PIC 9(9) COMP-5.
000390 02 stainf18 PIC 9(9) COMP-5.
000400 01 appPath PIC X(256) VALUE SPACE.
000410 01 pathLeng PIC S9(9) COMP-5.
000420 01 cmdline PIC X(256) VALUE SPACE.
000430 01 cmdlinLeng PIC S9(9) COMP-5.
000440 01 rtncd PIC 9(9) COMP-5.
000450 CONSTANT SECTION.
000460 01 ZDEFAULT PIC X(22) VALUE "..\SAMPLE31\MSGBOX.EXE".
000470 PROCEDURE DIVISION.
000480*=========================================== ======================
000490* Get the path name of the program or batch file to execute.
000500*=========================================== ======================
000510 DISPLAY " Input the path name that execution program.".
000520 DISPLAY " (If input no character, then execute the MsgBox.EXE of SAMPLE31)".
000530 DISPLAY " => " WITH NO ADVANCING.
000540 ACCEPT appPath FROM CONSOLE.
000550 COMPUTE pathLeng = FUNCTION STORED-CHAR-LENGTH(appPath)
000560*=========================================== ======================
000570* If nothing is input,
000580* then use the default path name ("..\SAMPLE31\MSGBOX.EXE").
000590*=========================================== ======================
000600 IF pathLeng = 0 THEN
000610 COMPUTE pathLeng = FUNCTION LENGTH (ZDEFAULT)
000620 MOVE ZDEFAULT TO appPath
000630 MOVE 0 TO cmdlinLeng
000640 ELSE
000650*=========================================== ======================
000660* If the path name is input,
000670* then get the command line arguments.
000680*=========================================== ======================
000690 DISPLAY " Input the command line arguments."
000700 DISPLAY " => " WITH NO ADVANCING
000710 ACCEPT cmdline FROM CONSOLE
000720 COMPUTE cmdlinLeng = FUNCTION STORED-CHAR-LENGTH(cmdline)
000730 MOVE LOW-VALUE TO cmdline(cmdlinLeng + 1:1)
000740 END-IF
000750 MOVE LOW-VALUE TO appPath(pathLeng + 1:1)
000760*=========================================== ======================
000770* Execute the program using the CreateProcessA function.
000780*=========================================== ======================
000790 DISPLAY "Execute the program " appPath(1:pathLeng)
000800 IF cmdlinLeng = 0 THEN
000810 *> If do not need command line arguments.
000820 CALL "CreateProcessA" WITH STDCALL LINKAGE
000830 USING BY REFERENCE appPath
000840 BY VALUE 0
000850 BY VALUE 0
000860 BY VALUE 0
000870 BY VALUE 0
000880 BY VALUE 0
000890 BY VALUE 0
000900 BY VALUE 0
000910 BY REFERENCE StartupInfo
000920 BY REFERENCE ProcessInfo
000930 RETURNING rtncd
000940 ELSE
000950 *> If need command line arguments.
000960 CALL "CreateProcessA" WITH STDCALL LINKAGE
000970 USING BY REFERENCE appPath
000980 BY REFERENCE cmdline
000990 BY VALUE 0
001000 BY VALUE 0
001010 BY VALUE 0
001020 BY VALUE 0
001030 BY VALUE 0
001040 BY VALUE 0
001050 BY REFERENCE StartupInfo
001060 BY REFERENCE ProcessInfo
001070 RETURNING rtncd
001080 END-IF
001090*
001100*=========================================== ======================
001110* CreateProcessA succeed.
001120*=========================================== ======================
001130 IF rtncd = 1 THEN
001140 DISPLAY "Succeeded in executing program " appPath(1:pathLeng)
001150 CALL "WaitForSingleObject" WITH STDCALL LINKAGE
001160 USING BY VALUE prcinf01 -1
001170 CALL "GetExitCodeProcess" WITH STDCALL LINKAGE
001180 USING BY VALUE prcinf01
001190 BY REFERENCE rtncd
001200*=========================================== ======================
001210* Free all resources.
001220*=========================================== ======================
001230 CALL "CloseHandle" WITH STDCALL LINKAGE
001240 USING BY VALUE prcinf01
001250 CALL "CloseHandle" WITH STDCALL LINKAGE
001260 USING BY VALUE prcinf02
001270 DISPLAY "Return code from " appPath(1:pathLeng) " is '" RTNCD "'."
001280*
001290*=========================================== ======================
001300* CreateProcessA failed.
001310*=========================================== ======================
001320 ELSE
001330 CALL "GetLastError" WITH STDCALL LINKAGE
001340 RETURNING rtncd
001350 DISPLAY "Failed in execution " appPath(1:pathLeng)
001360 DISPLAY "Return code is '" RTNCD "'."
001370 END-IF.
001380 STOP RUN.