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
  • Gestionar los errores
  • Los parámetros que deben ser pasados al método de DLL
  • Pasar una cadena a un DLL o recuperar una cadena de un DLL
  • Pasar una estructura que contiene una cadena a un DLL
  • 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 un método de una interfaz de un objeto implementado en una DLL externa a la WINDEV framework. Este objeto puede ser un objeto C++ o un objeto COM.
Ejemplo
nAllocator is system int
API("ole32", "CoGetMalloc", 1, &nAllocator)
nMemory is system int = CallInterface(nAllocator, 3, 1024)
Sintaxis

Usando el número de método Ocultar los detalles

<Result> = CallInterface(<Object address> , <Method 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 del método. Este resultado puede ser un código de error. La clase de este resultado depende de la ejecución del método. Para más detalles, consulte la documentación sobre el método.
El resultado del método no se recuperará si su tamaño excede el tamaño del entero definido para la plataforma.
<Object address>: Entero del sistema
Address del objeto sobre el que se llamará a un método. En la mayoría de los casos, esta Address es el resultado de la llamada previa a una API.
<Method number>: Integro
Número de orden del método en el tabla de métodos virtuales.
ATENCIÓN:
  • el número de orden tiene en cuenta las clases base
  • el número de orden empieza por 0.
<Parameter 1>: El tipo correspondiente al parámetro
Primer parámetro que se pasará al método. Estos parámetros y los parámetros esperados por el método deben ser del mismo tipo. Se puede utilizar:
  • los tipos "simples" (ver las Observaciones),
  • las estructuras (ver las Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure será llamada por el método (ver las Observaciones).
<Parameter N>: El tipo correspondiente al parámetro
Nth parámetro que se pasará al método. Estos parámetros y los parámetros esperados por el método deben ser del mismo tipo. Se puede utilizar:
  • los tipos "simples" (ver las Observaciones),
  • las estructuras (ver las Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure será llamada por el método (ver las Observaciones).

Usando una API description Variable Ocultar los detalles

<Result> = CallInterface(<Object address> , <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 del método. Este resultado puede ser un código de error. La clase de este resultado depende de la ejecución del método. Para más detalles, consulte la documentación sobre el método.
El resultado del método no se recuperará si su tamaño excede el tamaño del entero definido para la plataforma.
<Object address>: Entero del sistema
Address del objeto sobre el que se llamará a un método. En la mayoría de los casos, esta Address es el resultado de la llamada previa a una API.
<API to run>: API description Variable
API description variable que contiene las características del método a ejecutar.
<Parameter 1>: El tipo correspondiente al parámetro
Primer parámetro que se pasará al método. Estos parámetros y los parámetros esperados por el método deben ser del mismo tipo. Se puede utilizar:
  • los tipos "simples" (ver las Observaciones),
  • las estructuras (ver las Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure será llamada por el método (ver las Observaciones).
<Parameter N>: El tipo correspondiente al parámetro
Nth parámetro que se pasará al método. Estos parámetros y los parámetros esperados por el método deben ser del mismo tipo. Se puede utilizar:
  • los tipos "simples" (ver las Observaciones),
  • las estructuras (ver las Observaciones),
  • un nombre de WLanguage Procedure. Esta Procedure será llamada por el método (ver las Observaciones).
Observaciones

Controles realizados

CallInterface está protegida contra los "fallos de protección general" en el método denominado. Sin embargo, un error WLanguage se activa si se produce este tipo de error.

Gestionar los errores

Al ejecutar los métodos, si el resultado devuelto corresponde a un error, utilice la función ErrorInfo (con la constante errSystemCode o errSystemMessage) para obtener los detalles del error.

Los parámetros que deben ser pasados al método de DLL

Estos parámetros y los parámetros esperados por el método deben tener el mismo tipo.
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 el método a ejecutar espera un puntero de Windows o manipular, utilice un system integer.
    Si el método a ejecutar espera una Address, utilice el & operador.
  • Los tipos de "cadena.
  • Los tipos de estructura.
  • A nombre de WLanguage Procedure. Esta Procedure se llamará por el método del DLL (véase el párrafo siguiente).
    Los parámetros dependen de la ejecución del método. Para más detalles, consulte la documentación sobre este método.

Pasar una cadena a un DLL o recuperar una cadena de un DLL

  1. En el parámetro de entrada, utilice el tipo de cadena. Por ejemplo:
    sString is string
    CallInterface(<Object address>, <Method number>, 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
      CallInterface(<Object address>, <Method number>, 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(<Object address>, <Method number>, &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 = CallInterface(<Object address>, <Method number>)
    sString is string
    sString = StringRetrieve(nStringAddress, srASCIIZAddress)
    // in Method in C: Return PointerInC

Pasar una estructura que contiene una cadena a un DLL

  1. En la entrada se debe utilizar el siguiente código:
    Struct is structure
    sString is string
    END
    AStruct is Struct
    CallInterface(<Object address>, <Method number>, &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
      CallInterface(<Object address>, <Method number>, &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
      CallInterface(<Object address>, <Method number>, &AStruct)
      sString = StringRetrieve(AStruct:aString, srASCIIZAddress )
      // in Method in C: StructInC->PointerInC = "Test"

Procedure llamó en CallBack

Algunos métodos esperan la dirección de una "Callback" Procedure como parámetro: esta Procedure será llamada de nuevo por el método DLL.
Para usar una llamada de 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 del DLL.
  • 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. Modificar la llamada al método en consecuencia. Utilice la siguiente sintaxis:
CallInterface(<Object address>, <Method number>, ...
&<Name of CallBack procedure>)
Reportes y ConsultasWindowsCódigo de Usuario (UMC)

Varios

  • CallInterface no bloquea otros hilos.
  • Si el método de la DLL llamado modifica los ajustes regionales del sistema, se restauran los ajustes regionales anteriores.
APIParameter se utiliza para configurar el comportamiento de default de esta función.
Componente: wd290vm.dll
Versión mínima requerida
  • Versión 11
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 27/05/2022

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