Iniciar Sesión

Ver la Versión Completa : [Sintaxis] RETURNING en llamadas WinAPI en PowerCOBOL v3


Kuk
10 de mayo de 2015, 22:46
Amigos, ultimamente me he aficionado al PowerCOBOL 3 para mis cosillas en el trabajo porque se puede usar las aplicaciones como portables. Mi pregunta es la siguiente:

Se puede hacer llamadas a WinAPI, esto lo tengo seguro porque ya lo he probado y funciona. El problema que tengo que es no encuentro un equivalente a la palabra reservada RETURNING para PowerCOBOL v3. Y la verdad es que no estoy seguro si se necesita o no, porque normalmente todas las llamadas WinAPI sea devuelven un Integer, sea un Pointer. Y ese valor de retorno esta en PROGRAM-STATUS. Pero en caso de que realmente sea necesario, cual es (si existe) el equivalente a RETURNING? :yoquese: :piensa:

Rapinto
11 de mayo de 2015, 23:03
Kuk,

Nunca tinha usado o PowerCobol 3.

Instalei agora, quando colocaste esta pergunta. (Fez-me lembrar o VISUAL OBJECT COBOL da MicroFOCUS, na primeira versão á 10 anos atrás ..!!!!).

Pelo que eu tenho conhecimento, o RETURNING deveria existir em todos os CALL's.
Nos manuais, falam no CALL ..USING .... RETURNING para 16 bits. Por isso penso que deveria funcionar.

No Visual Basic, a instrução pode ser representada por :
Result = Call ......

Em Cobol, não existe, que eu saiba, nada semelhante. Sempre usei o RETURNING.
Já sei que isto não te ajuda em nada. Mas queria deixar-te a minha opinião.

Saludo,
Rui Pinto

Kuk
11 de mayo de 2015, 23:12
Rui, yo tambien he usado Visual Object COBOL for Windows 95 de MicroFocus!!! :D :amigo: He leido en el manual de PowerCOBOL v3 que no tiene RETURNING. Pero que devuelve los Integer en PROGRAM-STATUS. Es decir, el resultado de GetParent estara en un campo reservado PROGRAM-STATUS. A mi me ha interesado para llamadas WinAPI, pero las he revisado varias, donde hay lpStr etc (String), y lo que he visto es que nunca se pasa campo String, sino un Pointer a ese campo String. Asi que, diria yo, se puede perfectamente hacer todo de WinAPI. Lo que no he usado todavia tampoco es TYPEDEF (para algunas API-s es necesario).

Por cierto, el intalador de PowerCOBOL v3 es de 16 bits, pero el propio PowerCOBOL es de 32 bits!!! Porque yo lo he ejecutado en un Windows 7 x64 y los 16 bits no se pueden ejecutar en x64, solo en x86. El intalador, efectivamente, no se ejecuta en x64, pero PowerCOBOL v3 si! He hecho una version portable, para poder llevar a cualqueir PC sin instalador ;)

La version de PowerCOBOL v3 interesa porque se puede hacer programas portables. Para pequeñas herramientas me parece muy buena opcion. Ademas, es Freeware. Lo que no mola es que no hay muchos controles, por ejemplo ListView. Pero voy a intentar convertir un PushButton en ListView via WinAPI. :D Mucho codigo, pero es posible en teoria!

Un abrazo y gracias Rui! ;)

Rapinto
11 de mayo de 2015, 23:40
Kuk,

O TYPEDEF penso que é:


01 BROWSEINFO.
03 HWINDOW PIC S9(009) COMP-5 VALUE ZERO.
03 IDLIST PIC S9(009) COMP-5 VALUE ZERO.
03 DSPNAME PIC S9(009) COMP-5 VALUE ZERO.
03 DSPTITLE PIC S9(009) COMP-5 VALUE ZERO.
03 FLAGS PIC S9(009) COMP-5 VALUE ZERO.
03 XPTO PIC S9(009) COMP-5 VALUE ZERO.
03 LPARAM PIC S9(009) COMP-5 VALUE ZERO.
03 IIMAGE PIC S9(009) COMP-5 VALUE ZERO.


CALL "SHBrowseForFolder" WITH STDCALL LINKAGE USING
BY REFERENCE BROWSEINFO
RETURNING RESULT.



O Typedef BROWSEINFO é o nível 01 no COBOL com os sub-item em seguida.

Por exemplo no VB6 podes em seguida utilizar :
BROWSEINFO.LPRAM = "parâmetro X"

No COBOL utilizamos o MOVE de "parâmetro X" TO LPARAM.

Experimenta assim e vê se é o que pretendes.

Un Saludo,
Rui

Kuk
12 de mayo de 2015, 08:57
Rapinto, no me acuerdo que API era, pero en PowerCOBOL 9 yo hice algo parecido a esto y fue asi como funciono (solo pasando nivel 01 no funcionaba):


01 BROWSEINFO IS TYPEDEF.
03 HWINDOW PIC S9(009) COMP-5 VALUE ZERO.
03 IDLIST PIC S9(009) COMP-5 VALUE ZERO.
03 DSPNAME PIC S9(009) COMP-5 VALUE ZERO.
03 DSPTITLE PIC S9(009) COMP-5 VALUE ZERO.
03 FLAGS PIC S9(009) COMP-5 VALUE ZERO.
03 XPTO PIC S9(009) COMP-5 VALUE ZERO.
03 LPARAM PIC S9(009) COMP-5 VALUE ZERO.
03 IIMAGE PIC S9(009) COMP-5 VALUE ZERO.

01 BROWSEINFO1 TYPE BROWSEINFO.

PROCEDURE DIVISION.

CALL "SHBrowseForFolder" WITH STDCALL LINKAGE USING
BY REFERENCE BROWSEINFO
RETURNING RESULT.

MOVE HWINDOW OF BROWSEINFO1 TO ...
MOVE IDLIST OF BROWSEINFO1 TO ...