Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL y WinAPI (https://www.cobolforo.es/forumdisplay.php?f=33)
-   -   [Sintaxis] Llamada a Advapi32.lib (https://www.cobolforo.es/showthread.php?t=1534)

Josber 17 de octubre de 2022 19:24

Llamada a Advapi32.lib
 
A ver, he utilizado muchas veces la llamada a ésta API usando RegOpenKeyExA RegSetValueExA y RegCloseKey, aunque antes, siempre creaba a mano los valores necesarios en el registro de Windows para que no me diese ningún error, por lo que no tenía ningún problema, ahora quiero que si esas claves, no existen. crearlas, el problema es que cuando voy a usar RegCreateKeyEx, (me da igual usar esa que el Alias "RegCreateKeyExA", pasa lo mismo), al compilar, el "Linker" me tira el error

error LNK2001: unresolved external symbol _RegCreateKeyExA@20

Sé que esa función pertenece a esa librería, tengo el .lib incluido en el proyecto y también tengo incluido el parámetro ALPHAL(WORD), ¿alguna pista de qué puede pasar o faltar?, porque ya digo, con las otras llamadas a esa librería, no tengo ningún problema.

Muchas gracias

fastpho 17 de octubre de 2022 19:59

Hola @Josber, prueba con la libreria de este link Labs/advapi32.lib at master · Aekras1a/Labs · GitHub , por que me pasaba algo parecido con la libreria winspool me daba el mismo error que a vos al compilar y @Kuk me paso un link donde hay varias librerias y funciono bien

Saludos...

Josber 17 de octubre de 2022 20:19

Gracias @fastpho, he descargado esa librería y, aunque es un poco más grande que la mía (60k), sigue dando el mismo error

fastpho 17 de octubre de 2022 20:26

@Josber, Podrias poner unas lineas de codigo para ver como llamas a la libreria


Saludos...

Josber 17 de octubre de 2022 20:35

Sí claro @fastpho, sin problemas


Código COBOL:
  1. *
  2.  01  hkcu           PIC xxxx    VALUE x"01000080".
  3.  01  currentuser redefines hkcu   PIC s9(9)   COMP-5.
  4.  01  keyall             PIC xxxx    VALUE x"3F000000".
  5.  01  allaccess REDEFINES keyall     PIC s9(9)   COMP-5.
  6.  
  7.  01  keywrite           pic xxxx    value x"00020006".
  8.  01  kwrite    REDEFINES keywrite PIC s9(9)   comp-5.
  9.  
  10.  01  reg-sz             PIC s9(9)   COMP-5.
  11.  01  handle             PIC s9(9)   COMP-5 VALUE 0. *> receives handle to the registry key
  12.  01  len                PIC s9(9)   COMP-5 VALUE 0.
  13.  01  res                PIC s9(9)   COMP-5 VALUE 0. *> Resultado de la operación
  14.  01  SEC_ATTRIB         PIC S9(9)   COMP-5 VALUE 0. *> Descriptor de seguridad por defecto (0)
  15.  01  NEW_OR_USED            PIC S9(9)   COMP-5.     *> receives flag for if the key was created or opened
  16.  01  POW-ARG-KEY            PIC X(8192) VALUE SPACES.
  17.  01  POW-ARG-NAME       PIC X(8192) VALUE SPACES.
  18.  01  POW-ARG-VALUE      PIC X(8192).

Código COBOL:
  1.      CALL "RegCreateKeyExA" WITH stdcall LINKAGE
  2.           USING BY VALUE     handle
  3.                 BY VALUE     SEC_ATTRIB
  4.                 BY REFERENCE POW-ARG-KEY
  5.                 BY VALUE     NEW_OR_USED
  6.                 BY REFERENCE POW-ARG-NAME
  7.          RETURNING res
  8.      END-CALL.

Si falta algo, me lo dices
Mil gracias

fastpho 17 de octubre de 2022 20:36

Cita:

Citación del post de fastpho (Mensaje 8170)
@Josber, Podrias poner unas lineas de codigo para ver como llamas a la libreria


Saludos...

Ejemplo de codigo en visual basic : vb6-winapi/registry.bas at master · mmcguill/vb6-winapi · GitHub

Kuk 17 de octubre de 2022 20:42

@Josber, compañero le estás pasando 5 parámetros, pero es que esta función espera 8 y no 5: RegCreateKeyExA function (winreg.h) - Win32 apps | Microsoft Learn

De ahí lo de _RegCreateKeyExA@20. Son 4 bytes por parámetro, sea cual sea la propiedad (VALUE, REFERENCE etc.). 4 x 5 = 20

Lo que espera son 8 así que 8 x 4 = 32, si el error fuera _RegCreateKeyExA@32 entonces sí que podríamos pensar que hay algún problema con la librería. Pero mientras que la llamada no lleve cantidad correcta de parámetros, podría ser que tu librería fuera válida también.

fastpho 17 de octubre de 2022 22:14

@Josber, lo compile y no da error , no lo quise correr para no tocar mi registro
Ejemplo
Código COBOL:
  1.  01 HKEY_LOCAL_MACHINE                   PIC XXXX VALUE X"80000002".       *> hKey
  2.  01 H_L_M redefines HKEY_LOCAL_MACHINE   PIC S9(9)   COMP-5.
  3.  01 subkey                               PIC X(8196).                      *> lpSubKey  
  4.  01 Reserved                             PIC S9(9)   COMP-5 VALUE ZERO.    *> Reserved
  5.  01 NULO                                 PIC X.                            *> lpClass
  6.  01 REG_OPTION_NON_VOLATILE              PIC S9(9)   COMP-5 VALUE ZERO.    *> dwOptions
  7.  01 KEY_ALL_ACCESS                       PIC S9(9)   COMP-5 VALUE 983103.  *> samDesired    HEX F003F
  8.  01 lpSecurityAttributes                 PIC S9(9)   COMP-5 VALUE ZERO.    *> lpSecurityAttributes
  9.  01 hregkey                              PIC S9(9)   COMP-5.               *> phkResult
  10.  01 neworused                            PIC S9(9)   COMP-5.               *> lpdwDisposition recibe 1 La clave no existía y fue creada , recive 2 si existía y simplemente se abrió sin cambiarla
  11.  01 retval                               PIC S9(9)   COMP-5.               *> retorno de la func

Código COBOL:
  1.  
  2.      MOVE "SoftwarePruebaSOFT" TO subkey.
  3.      MOVE SPACES TO NULO
  4.      CALL "RegCreateKeyExA" WITH stdcall LINKAGE
  5.           USING BY REFERENCE     HKEY_LOCAL_MACHINE
  6.                 BY REFERENCE     subkey
  7.                 BY VALUE         Reserved
  8.                 BY VALUE         NULO                              
  9.                 BY VALUE         REG_OPTION_NON_VOLATILE
  10.                 BY VALUE         KEY_ALL_ACCESS
  11.                 BY VALUE         lpSecurityAttributes
  12.                 BY REFERENCE     hregkey
  13.                 BY REFERENCE     neworused
  14.          RETURNING retval
  15.      END-CALL.
  16.      DISPLAY "Resultado: " , RETVAL.
  17.      DISPLAY "neworused" ,  neworused.
Saludos ...

Josber 18 de octubre de 2022 08:44

Muchas gracias @fastpho, voy a probarlo y te digo algo.

Estuve mirando el primer ejemplo que "pillé" en Vb, y en ese ejemplo. sólo le pasaba esos parámetros, no se me ocurrió mirar más ejemplos, si es que algunas veces, tengo errores de novato, pero, lo dicho, compruebo y digo algo

Un salu2.-

Kuk 18 de octubre de 2022 15:05

Cita:

Citación del post de Josber (Mensaje 8175)
Muchas gracias @fastpho, voy a probarlo y te digo algo.

Estuve mirando el primer ejemplo que "pillé" en Vb, y en ese ejemplo. sólo le pasaba esos parámetros, no se me ocurrió mirar más ejemplos, si es que algunas veces, tengo errores de novato, pero, lo dicho, compruebo y digo algo

Un salu2.-

Seguramente fuera un ejemplo para Windows 95 o algo así :D

Siempre verifica en la página de MS. Normalmente el Nº de parámetros no suele cambiar, pero hay casos que sí ;)


La franja horaria es GMT +2. Ahora son las 15:40.

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