Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] RETURNING en llamadas WinAPI en PowerCOBOL v3 (https://www.cobolforo.es/showthread.php?t=133)

Kuk 10 de mayo de 2015 22:46

RETURNING en llamadas WinAPI en PowerCOBOL v3
 
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 é:

Código COBOL:
  1.  01  BROWSEINFO.                                                    
  2.      03  HWINDOW                   PIC S9(009)    COMP-5  VALUE ZERO.
  3.      03  IDLIST                    PIC S9(009)    COMP-5  VALUE ZERO.
  4.      03  DSPNAME                   PIC S9(009)    COMP-5  VALUE ZERO.
  5.      03  DSPTITLE                  PIC S9(009)    COMP-5  VALUE ZERO.
  6.      03  FLAGS                     PIC S9(009)    COMP-5  VALUE ZERO.
  7.      03  XPTO                      PIC S9(009)    COMP-5  VALUE ZERO.
  8.      03  LPARAM                    PIC S9(009)    COMP-5  VALUE ZERO.
  9.      03  IIMAGE                    PIC S9(009)    COMP-5  VALUE ZERO.
  10.  
  11.  
  12.      CALL "SHBrowseForFolder" WITH STDCALL LINKAGE USING        
  13.                                BY REFERENCE BROWSEINFO
  14.                          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):

Código COBOL:
  1.  01  BROWSEINFO IS TYPEDEF.                                                    
  2.      03  HWINDOW                   PIC S9(009)    COMP-5  VALUE ZERO.
  3.      03  IDLIST                    PIC S9(009)    COMP-5  VALUE ZERO.
  4.      03  DSPNAME                   PIC S9(009)    COMP-5  VALUE ZERO.
  5.      03  DSPTITLE                  PIC S9(009)    COMP-5  VALUE ZERO.
  6.      03  FLAGS                     PIC S9(009)    COMP-5  VALUE ZERO.
  7.      03  XPTO                      PIC S9(009)    COMP-5  VALUE ZERO.
  8.      03  LPARAM                    PIC S9(009)    COMP-5  VALUE ZERO.
  9.      03  IIMAGE                    PIC S9(009)    COMP-5  VALUE ZERO.
  10.  
  11.  01  BROWSEINFO1 TYPE BROWSEINFO.
  12.  
  13.  PROCEDURE DIVISION.
  14.  
  15.      CALL "SHBrowseForFolder" WITH STDCALL LINKAGE USING      
  16.                                BY REFERENCE BROWSEINFO
  17.                                RETURNING RESULT.
  18.      
  19.      MOVE HWINDOW OF BROWSEINFO1 TO ...
  20.      MOVE IDLIST  OF BROWSEINFO1 TO ...


La franja horaria es GMT +2. Ahora son las 13:58.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.