AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de Windows / Funciones varias de Windows
  • Controles realizados
  • Gestión de errores
  • Carga y descarga de la DLL
  • Parámetros que se pasarán a la función de DLL
  • Pasar un string a una API o recuperar un string de una API
  • Pasar una estructura que contiene una cadena a una API
  • Procedure llamó en CallBack
  • Varios
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Ejecuta una función que se encuentra en una DLL externa. Esta función puede ser una función de Windows API. Las funciones a las que puede acceder CallDLL32 son las funciones de las bibliotecas estándar de Windows (USER32, KERNEL32, GDI32, etc.).
La función se puede identificar por:
  • el nombre.
  • su número.
  • su Address.
También es posible utilizar una Variable de tipo API description. Para las API que usan parámetros de tipos específicos o que se llaman varias veces en la misma aplicación, se recomienda usar una API description Variable directamente (sin usar el CallDLL32 función).
Observaciones:
  • Esta función es equivalente a la función API.
  • Si la función a ejecutar contiene parámetros QWORD, debe utilizar una API description Variable (Sintaxis 4).
CallDLL32("USER32", "SendMessageA", hWnd, wMsg, lParam1, lParam2)
Sintaxis

Ejecutar una función de una DLL externa o una función de la API de Windows identificada por su nombre Ocultar los detalles

<Result> = CallDLL32(<DLL name> , <Function name> [, <Parameter 1> [... [, <Parameter N>]]])
<Result>: Un entero de 4 bytes en 32 bits, un entero de 8 bytes en 64 bits
Resultado de la ejecución de . Este resultado puede ser un código de error. La clase de este resultado depende de la ejecución de la función. Para más detalles, consulte la documentación sobre esta función.
El resultado de la función no se recuperará si su tamaño excede el tamaño del entero definido para la plataforma.
<DLL name>: Cadena de caracteres
Nombre de la biblioteca (DLL) que contiene la función a ejecutar.
<Function name>: Cadena de caracteres
Nombre de la función a ejecutar. Esta función debe encontrarse en la DLL especificada.
<Parameter 1>: Tipo de parámetro (opcional)
Primer parámetro que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).
<Parameter N>: Tipo de parámetro (opcional)
Parámetro Nth que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).

Ejecutar una función de una DLL externa o una función de Windows API identificada por su número Ocultar los detalles

<Result> = CallDLL32(<DLL name> , <Function number> [, <Parameter 1> [... [, <Parameter N>]]])
<Result>: Un entero de 4 bytes en 32 bits, un entero de 8 bytes en 64 bits
Resultado de la ejecución de . Este resultado puede ser un código de error. La clase de este resultado depende de la ejecución de la función. Para más detalles, consulte la documentación sobre esta función.
El resultado de la función no se recuperará si su tamaño excede el tamaño del entero definido para la plataforma.
<DLL name>: Cadena de caracteres
Nombre de la biblioteca (DLL) que contiene la función a ejecutar.
<Function number>: Cadena de caracteres
Número de la función a ejecutar. Esta función debe encontrarse en la DLL especificada.
<Parameter 1>: El tipo correspondiente al parámetro
Primer parámetro que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).
<Parameter N>: El tipo correspondiente al parámetro
Parámetro Nth que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).

Ejecutar una función de una DLL externa o una función de la API de Windows identificada por su Address Ocultar los detalles

<Result> = CallDLL32(<Function address> [, <Parameter 1> [... [, <Parameter N>]]])
<Result>: Un entero de 4 bytes en 32 bits, un entero de 8 bytes en 64 bits
Resultado de la ejecución de . Este resultado puede ser un código de error. La clase de este resultado depende de la ejecución de la función. Para más detalles, consulte la documentación sobre esta función.
El resultado de la función no se recuperará si su tamaño excede el tamaño del entero definido para la plataforma.
<Function address>: Integro
Address en memoria de la función a ejecutar.
<Parameter 1>: El tipo correspondiente al parámetro
Primer parámetro que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).
<Parameter N>: El tipo correspondiente al parámetro
Parámetro Nth que se pasará a la función. Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función. Se puede utilizar:
  • los tipos "simples" (ver Observaciones),
  • las estructuras (ver Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).
Observaciones

Controles realizados

  • La función CallDLL32 está protegida contra los "Errores de protección general" en la función llamada. Sin embargo, un error WLanguage se activa si se produce este tipo de error.
  • Para las funciones que siguen al prototipo de llamada PASCAL (especialmente las funciones de Windows API), se realiza una simple comprobación del número de parámetros pasados a la función.. Un error de WLanguage ocurre en caso de discrepancia.

Gestión de errores

Al ejecutar funciones de la API de Windows, si el resultado devuelto corresponde a un error, utilice ErrorInfo (asociado al errSystemCode o errSystemMessage 004d00650073007300610067006500 constante) para averiguar los detalles del error.

Carga y descarga de la DLL

La función CallDLL32 carga automáticamente la DLL si es necesario, luego la descarga (si se había cargado). Este mecanismo puede ser bastante lento, excepto para las DLLs del sistema (KERNEL, USER, GDI).
Para optimizar la velocidad de ejecución, se aconseja cargar la DLL una vez con CargaDLLL y descargarla con FreeDLL cuando ya no se utilice.

Parámetros que se pasarán a la función de DLL

Estos parámetros deben tener el mismo tipo que los parámetros esperados por la función.
Los tipos disponibles son los siguientes:
  • Los tipos "simples" (entero, real y booleano). El uso de otro tipo de WLanguage desencadena un error de WLanguage.
    Si la función a ejecutar espera un puntero o un manipular de Windows, utilice un system integer.
    Si la función a ejecutar espera una Address, utilice el operador &.
  • Los tipos "cadena.
  • Los tipos de estructura.
  • Un nombre de WLanguage Procedure. Esta Procedure será llamada por la función del DLL (ver el párrafo siguiente).
    Los parámetros dependen de la ejecución de la función. Véase la documentación sobre esta función para más detalles.

Pasar un string a una API o recuperar un string de una API

  1. En el parámetro de entrada, utilice el tipo de cadena. Por ejemplo:
    sString is string
    CallDll32(<DLL>, <Function>, sString)
  2. En el parámetro de salida, el lenguaje C no puede gestionar fácilmente las cadenas dinámicas. Por lo tanto, debes hacerlo:
    • definir un tamaño máximo, con el tipo "String on. Por ejemplo:
      sString is string on 100
      CallDLL32(<DLL>, <Function>, sString)
      // in Method in C:
      // STRNCPY(PointerInC, "Test", 100)
    • recuperar las direcciones de las cadenas en C (sin embargo, en este caso, la sección de código en C debe "preservar" las cadenas devueltas), luego transferir la cadena a una cadena Variable con StringRetrieve. Por ejemplo:
      nStringAddress is system int
      CallDLL32(<DLL>, <Function>, &nStringAddress)
      sString is string
      sString = StringRetrieve(nStringAddress, srASCIIZAddress)
      // in Method in C: *PointerInC = "Test"
  3. En el valor de retorno, recuperar las direcciones de las cadenas en C (sin embargo, en este caso, la sección de código en C debe "preservar" las cadenas devueltas), a continuación, transferir la cadena en una cadena Variable con StringRetrieve. Por ejemplo:
    nStringAddress is system int
    nStringAddress = CallDLL32(<DLL>, <Function>)
    sString is string
    sString = StringRetrieve(nStringAddress, srASCIIZAddress)
    // in Method in C: Return PointerInC

Pasar una estructura que contiene una cadena a una API

  1. En la entrada se debe utilizar el siguiente código:
    Struct is structure
    sString is string
    END
    AStruct is Struct
    CallDLL32(<DLL>, <Function>, &AStruct)
  2. En salida, el lenguaje C no gestiona fácilmente las cadenas dinámicas. Por lo tanto, debes hacerlo:
    • definir un tamaño máximo y realizar una copy en la memoria de WLanguage. Por ejemplo:
      sString is string on 100
      Struct is structure
      aString is int
      END
      AStruct is Struct
      AStruct:aString = &sString
      CallDLL32(<DLL>, <Function>, &AStruct)
      // in Method in C:
      // STRNCPY(CStruct->PointerInC, "Test", 100)
    • recuperar la Address de cadenas en C (sin embargo, en este caso, la sección de código en C debe "preservar" las cadenas devueltas). Por ejemplo:
      sString is string
      Struct is structure
      aString is int
      END
      AStruct is Struct
      CallDLL32(<DLL>, <Function>, &AStruct)
      sString = StringRetrieve(AStruct:aString, srASCIIZAddress)
      // in Method in C: StructInC->PointerInC = "Test"

Procedure llamó en CallBack

Algunas funciones de la API de Windows esperan la dirección de un "CallBack" Procedure como parámetro: este Procedure será llamado de nuevo por la función del API.
Por ejemplo: EnumWindows API se utiliza para listar todas las ventanas de Windows abiertas en un ordenador.. Esta función espera la dirección de una Procedure como parámetro: este Procedure será llamado cada vez que se encuentre una ventana.
Observación: Los procedimientos de CallBack se pueden utilizar en 32 bits y en 64 bits..
Para usar una llamada de Procedure en WLanguage:
1. Cree la devolución de llamada Procedure en su proyecto.
Para recuperar los parámetros, debe describir exactamente los parámetros esperados por la función "CallBack. De lo contrario, pueden producirse "fallos generales de protección"..
PROCEDURE <Procedure name> (<Param1> is <Type1>,<Param2> is <Type2>)
Observaciones:
  • Los tipos deben corresponder a los descritos en la documentación de la API.
  • El tipo de la función "CallBack" de la DLL debe ser "STDCALL"..
  • Los parámetros deben necesariamente ser pasados por valor. Para recuperar un parámetro de reference:
    1. Utilice un número entero.
    2. Con Transferencia, recupera o asigna el valor real.
2. Modifique la llamada a la función en consecuencia. Utilice la siguiente sintaxis:
CallDLL32(<DLL name>, <Function name>, <Name of callback procedure>)
Vea el ejemplo completo para más detalles.

Varios

  • Las funciones API y CallDLL32 no bloquean los otros subprocesos.
  • Si la función API llamada modifica los ajustes regionales del sistema, se restauran los ajustes regionales anteriores.
APIConfigure se utiliza para configurar el comportamiento de estas funciones en Default.
Observación: hasta la versión 100045:
  • Las funciones API y CallDLL32 bloquean los otros subprocesos.
  • Si la función API invocada modifica los ajustes regionales del sistema (idiomas, decimales, etc.), los ajustes regionales anteriores no se restauran.
Componente: wd290vm.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Exemplo
https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/3763-windev-desenvolvendo-dll-assembler-net-32-64-usando/read.awp
Boller
01 06 2021
Alterar Papel de Parede
PROCEDURE Wallpaper()

// Alterando o Papel de parede do Windows
bAlterado is boolean = False
fMakeDir("C:\Temp\")
fCopyFile("saw.apt","sawarning.jpg")
WRegFondEcran is string = "C:\Temp\sawarning.jpg"
fCopyFile("sawarning.jpg","C:\Temp\sawarning.jpg")
WChemin is string = "HKEY_CURRENT_USER\Control Panel\Desktop"
IF RegistrySetValue (WChemin, "Wallpaper", WRegFondEcran) = False
Error("Error image")
bAlterado = False
ELSE
bAlterado = True
uAction is int
uParam is int
lpvParam is string ASCIIZ on 255
uAction = 20
uParam = 0
lpvParam = WRegFondEcran
CallDLL32("user32", "SystemParametersInfoA", uAction, uParam,&lpvParam, 0)
END

RESULT bAlterado
BOLLER
02 04 2019
Video CallDll32
https://youtu.be/F72RFUHyyMQ
amarildo
16 12 2018

Última modificación: 23/06/2023

Señalar un error o enviar una sugerencia | Ayuda local