Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Inhibir ventana de error


Breew
3 de abril de 2020, 10:32
Hola.
Tengo una llamada externa a un editor de texto hecha con CmDDE.
Contemplo la posibiidad de que este el editor en version64 o en version32.
Efectuo la llamada al de 32 y si no existe, que lance directamente el de 64.
Pero me encuentro que aunque chequee el returnvalue, la ventana de aviso de que no existe, me aparece igual y el returnvalue siempre me sale a cero.
Como puedo eliminar el aviso sin que me espere el aceptar de la ventana de aviso?

STRING
"UEDIT32.EXE LISTADO.TXT" DELIMITED BY SIZE INTO DDE-WORD.
INVOKE CmDDE1 "Execute" USING DDE-WORD POW-SWSHOWNORMAL RETURNING ReturnValue

IF ReturnValue = POW-FALSE THEN GO ULTRAEDIT64 ELSE EXIT PROGRAM.



Muchas gracias.

Joseg
3 de abril de 2020, 11:19
Hola.
Tengo una llamada externa a un editor de texto hecha con CmDDE.
Contemplo la posibiidad de que este el editor en version64 o en version32.
Efectuo la llamada al de 32 y si no existe, que lance directamente el de 64.
Pero me encuentro que aunque chequee el returnvalue, la ventana de aviso de que no existe, me aparece igual y el returnvalue siempre me sale a cero.
Como puedo eliminar el aviso sin que me espere el aceptar de la ventana de aviso?

STRING
"UEDIT32.EXE LISTADO.TXT" DELIMITED BY SIZE INTO DDE-WORD.
INVOKE CmDDE1 "Execute" USING DDE-WORD POW-SWSHOWNORMAL RETURNING ReturnValue

IF ReturnValue = POW-FALSE THEN GO ULTRAEDIT64 ELSE EXIT PROGRAM.



Muchas gracias.

MinHa sugestão:

SPECIAL-NAMES.
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2

WORKING-STORAGE.
01 WENVVALOR PIC X(100).

PROCEDURE DIVISION.
DISPLAY "ProgramW6432" UPON ENV1
ACCEPT WENVVALOR FROM ENV2
IF WENVVALOR = SPACES
MOVE "prog32" TO wPprog *> 32Bits
ELSE
MOVE "prog64" TO wPprog *> 64Bits
END-IF

Breew
3 de abril de 2020, 16:25
Hola.
No me sale :eek:
No me reconoce el special names.
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2
(Powercobol v9)


listar-base SPECIAL-NAMES(2) : JMN1123I-S An invalid word 'ENVIRONMENT-NAME' was found. The invalid word and any following code is ignored until the next valid paragraph, section or division.

listar-base (283) : JMN5100I-S The class-name specified in the USAGE OBJECT REFERENCE clause is invalid. The class-name is ignored.


MinHa sugestão:

SPECIAL-NAMES.
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2

WORKING-STORAGE.
01 WENVVALOR PIC X(100).

PROCEDURE DIVISION.
DISPLAY "ProgramW6432" UPON ENV1
ACCEPT WENVVALOR FROM ENV2
IF WENVVALOR = SPACES
MOVE "prog32" TO wPprog *> 32Bits
ELSE
MOVE "prog64" TO wPprog *> 64Bits
END-IF

Kuk
3 de abril de 2020, 16:41
Breew, elimina lo de SPCEIAL-NAMES y reemplaza en PROCEDURE por :


DISPLAY "ProgramW6432" UPON ENVIRONMENT-NAME
ACCEPT WENVVALOR FROM ENVIRONMENT-VALUE
IF WENVVALOR = SPACES
...


A ver qué tal, debería cogerlo

Breew
3 de abril de 2020, 21:12
Hola.

Nada , me indica error en compilacion


JMN2503I-S User word 'ENVIRONMENT-NAME' is undefined.
JMN2503I-S User word 'ENVIRONMENT-VALUE' is undefined.
JMN2503I-S User word 'WPPROG' is undefined.


Breew, elimina lo de SPCEIAL-NAMES y reemplaza en PROCEDURE por :


DISPLAY "ProgramW6432" UPON ENVIRONMENT-NAME
ACCEPT WENVVALOR FROM ENVIRONMENT-VALUE
IF WENVVALOR = SPACES
...


A ver qué tal, debería cogerlo

Kuk
4 de abril de 2020, 11:45
Breew, en este caso pasa por WinAPI : GetEnvironmentVariable function (winbase.h) - Win32 apps | Microsoft Docs (https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getenvironmentvariable)

Ejemplo:


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 envVarName PIC X(50).
01 envVarValue PIC X(250).
PROCEDURE DIVISION.

MOVE "ProgramW6432" & X"00" TO envVarName

CALL "GetEnvironmentVariableA" WITH STDCALL USING BY CONTENT envVarName
BY REFERENCE envVarValue
BY VALUE LENGTH OF envVarValue

DISPLAY envVarValue


No olvides de añadir la directiva de compilación ALPHAL(WORD) haciendo clic botón derecho en (Script) [COBOL Script] y seleccionando "Properties".

Asimismo, añade al módulo C:\Program Files (x86)\Fujitsu NetCOBOL for Windows\KERNEL32.LIB

Breew
4 de abril de 2020, 19:25
Hola Kuk.
La aplicacion donde me hace falta, utilizo unas rutinas que Rapinto puso para hacer unas busquedas en una base .mdb con ole.
Al añadir en la directiva del script compilador el ALPHAL(WORD), hay ciertas rutina que me dan error en compilacion. He echado un vistazo por encima y no entiendo el motivo.

listar-base.obj : error LNK2001: unresolved external symbol _Leer-base
listar-base.obj : error LNK2001: unresolved external symbol _abrir-base
listar-base.obj : error LNK2001: unresolved external symbol _leer-base-ventas

Si elimino el ALPHAL(WORD), vuelve a funcionar.
Para no liarlo mas, lo hare en un proyecto nuevo, y lo llamare cuando me haga falta.



He abierto un proyecto nuevo para probarlo.
Si que funciona, pero no se como lo puedo utilizar.
El problema que tengo es que el editor que intento abrir , hay maquinas que lo tienen en su version de 32 bytes y otras de 64. Concretamente serian los ejecutables de uedit32.exe y uedit64.exe.
Para capearlo, normalmente hago una llamada a los dos ( como puse en el primer mensaje ).
Supongo que en la variable envVarName deberia poner el ejecutable, pero envVarvalue sale espacios.
Como deberia hacerlo?

Gracias

Joseg
4 de abril de 2020, 19:34
Hola.

Nada , me indica error en compilacion


JMN2503I-S User word 'ENVIRONMENT-NAME' is undefined.
JMN2503I-S User word 'ENVIRONMENT-VALUE' is undefined.
JMN2503I-S User word 'WPPROG' is undefined.


Ver exemplo, talvez seja mais fácil !!

Breew
4 de abril de 2020, 22:47
Hola.

Suelto si funciona , pero al implementarlo en mi programa, en el special names, junto al decimal-point is comma, me da error.
No se si a vosotros os pasa tambien?.

En todo caso la solucion que podria hacer es una llamada al ejecutable desde la aplicacion.

Gracias

Joseg
5 de abril de 2020, 00:06
Hola.

Suelto si funciona , pero al implementarlo en mi programa, en el special names, junto al decimal-point is comma, me da error.
No se si a vosotros os pasa tambien?.

En todo caso la solucion que podria hacer es una llamada al ejecutable desde la aplicacion.

Gracias

Ponga su código aquí en particular "special names". Tiene que funcionar

Breew
5 de abril de 2020, 08:41
Hola Jose.

En tu mismo ejemplo, con añadir la instruccion de DECIMAL-POINT IS COMMA en ENVIROMENT - SPECIAL NAMES ya me da error.

DECIMAL-POINT IS COMMA.
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2.



Ponga su código aquí en particular "special names". Tiene que funcionar

Joseg
5 de abril de 2020, 13:07
Hola Jose.

En tu mismo ejemplo, con añadir la instruccion de DECIMAL-POINT IS COMMA en ENVIROMENT - SPECIAL NAMES ya me da error.

DECIMAL-POINT IS COMMA.
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2.


Apenas 1 ponto !!


ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2
DECIMAL-POINT IS COMMA.

Breew
5 de abril de 2020, 14:32
:eek::eek::eek::eek:

Conseguido !!!!!!:mola::mola::mola:

No sabia que no se podia escribir mas de un punto.


Gracias

Kuk
6 de abril de 2020, 11:12
Breew, el "problema" con ALPHAL(WORD) es que se deben respetar las mayúsculas y minúsculas. Si el programa se llama "Leer-Fichero" y haces CALL "LEER-FICHERO" ya no va a funcionar. ;)

Breew
6 de abril de 2020, 19:19
Hola Kuk.

Efectivamente, subsanado el error de mayusculas y minusculas, funciona perfectamente.