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.
  • 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 a un 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 API 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 utilizan parámetros de tipos específicos o que se llaman varias veces en la misma aplicación, se recomienda utilizar directamente una API description Variable (sin utilizar la función API).
Observaciones:
  • Esta función es equivalente a la función CallDLL32.
  • Si la función a ejecutar contiene parámetros QWORD, debe utilizar una API description Variable (Sintaxis 4).
Ejemplo
API("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> = API(<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 <Nombre de la función>.. 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>: 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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> = API(<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 <Nombre de la función>.. 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>: Integro
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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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> = API(<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 <Nombre de la función>.. 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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 una API description Variable Ocultar los detalles

<Result> = API(<API to run> [, <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 <API to run>.. 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.
<API to run>: API description Variable
API description variable que contiene las características 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" (véanse las notas),
  • las estructuras (ver Notas),
  • 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" (véanse las notas),
  • las estructuras (ver Notas),
  • un nombre de WLanguage Procedure. Esta Procedure se llamará por la función de DLL (ver Observaciones).
Observaciones

Controles realizados

  • La función API 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 (asociada a la constante errSystemCode o errSystemMessage) para conocer los detalles del error.

Carga y descarga de la DLL

La función API 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:
  • The "simple" tipos (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 de "cadena.
  • Los tipos de estructura.
  • A 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
    API(<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
      API(<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
      API(<DLL>, <Function>, &nStringAddress)
      sString is string
      sString = StringRetrieve(nStringAddress, srASCIIZAddress)
      // in Method in C: *PointerInC = "Test"
  3. En el valor de retorno, recupera 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 transfiere la cadena en una cadena Variable con StringRetrieve.
    Por ejemplo:
    nStringAddress is system int
    nStringAddress = API(<DLL>, <Function>)
    sString is string
    sString = StringRetrieve(nStringAddress, srASCIIZAddress)
    // in Method in C: Return PointerInC

Pasar una estructura a un API

Las estructuras pueden pasarse directamente como parámetro a las API, sin pasar por su Address. Para ello, los miembros de la estructura deben pasarse en el parámetro uno a uno.
Limite: Todos los miembros de la estructura deben estar alineados en 4 bytes.

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
    API(<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
      API(<DLL>, <Function>, &AStruct)
      // in Method in C:
      // STRNCPY(CStruct->PointerInC, "Test", 100)
    • recuperar la Address de cuerdas en Do (sin embargo, en este caso, la sección de código en Do debe "preservar" las cuerdas devueltas).
      Por ejemplo:
      sString is string
      Struct is structure
      aString is int
      END
      AStruct is Struct
      API(<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 una Procedure "CallBack" 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..
To utiliza una llamada de retorno Procedure en WLanguage:
1. Crea la llamada Procedure en tu 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.
  • La convención de llamada de las funciones de "CallBack" de la DLL debe ser "STDCALL" o "CDECL". Por defecto, la convención de llamadas se considera como "STDCALL". Una llamada de "CDECL" puede ser declarada a través del atributo "convención de llamadas".. El prototipo de la función se convierte en:
    PROCEDURE <Procedure name> (<Param1> is <Type1>, ...
    <Param2> is <Type2>) <call convention=CDECL>
  • Los parámetros deben necesariamente ser pasados por valor. Para recuperar un parámetro de reference:
    1. Utilice un número entero.
    2. Con Transferir, recupera o asigna el valor real.
2. Modifique la llamada a la función en consecuencia.. Utilice la siguiente sintaxis:
API(<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 hilos.
  • Si la función API llamada modifica los ajustes regionales del sistema, se restauran los ajustes regionales anteriores.
APIParameter 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 hilos.
  • Si la función API invocada modifica los ajustes regionales del sistema (idiomas, decimales, etc.), los ajustes regionales anteriores no se restauran.
Componente: wd280vm.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario