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
  • 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
  • Procedimiento llamado CallBack
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadApple WatchUniversal 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. Consulte la documentación sobre el método para obtener más detalles..
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
Dirección del objeto sobre el que se llamará un método. En la mayoría de los casos, esta dirección 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" (véase las Notas),
  • las estructuras (véase las Notas),
  • un nombre del procedimiento WLanguage. Este procedimiento será llamado por el método (ver las Notas).
<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" (véase las Notas),
  • las estructuras (véase las Notas),
  • un nombre del procedimiento WLanguage. Este procedimiento se llamará por el método (véase las Notas).

Usando una variable de descripción de la API 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. Consulte la documentación sobre el método para obtener más detalles..
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
Dirección del objeto sobre el que se llamará un método. En la mayoría de los casos, esta dirección es el resultado de la llamada previa a una API.
<API to run>: API Descripción de la variable
Variable Descripción de la API 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" (véase las Notas),
  • las estructuras (véase las Notas),
  • un nombre del procedimiento WLanguage. Este procedimiento será llamado por el método (ver las Notas).
<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" (véase las Notas),
  • las estructuras (véase las Notas),
  • un nombre del procedimiento WLanguage. Este procedimiento se llamará por el método (véase las Notas).
Observaciones

Controles realizados

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

Gestión de errores

Al ejecutar métodos, si el resultado devuelto corresponde a un error, utilice ErrorInfo (asociado con la constante errSystemCode o errSystemMessage) para averiguar 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 dirección, utilice el & operador.
  • Los tipos de "cadena.
  • Los tipos de estructura.
  • A nombre del procedimiento WLanguage. Este procedimiento 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. Consulte la documentación sobre este método para obtener más detalles.

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 variable de cadena 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 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), luego transferir la cadena a una variable de cadena 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 copia en la memoria 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 dirección de las 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
      CallInterface(<Object address>, <Method number>, &AStruct)
      sString = StringRetrieve(AStruct:aString, srASCIIZAddress )
      // in Method in C: StructInC->PointerInC = "Test"

Procedimiento llamado CallBack

Algunos métodos esperan la dirección de un procedimiento "Callback" en el parámetro: este procedimiento será llamado de nuevo por el método DLL.
Para utilizar un procedimiento de devolución de llamada en WLanguage:
1. Cree el procedimiento de devolución de llamada 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 del DLL.
  • Los parámetros deben necesariamente ser pasados por valor. Para recuperar un parámetro por referencia:
    1. Utilice un número entero.
    2. Con Transferencia, recuperar o asignar 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>)
Componente: wd270vm.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