|
|
|
|
- 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
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.
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 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. 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 - En el parámetro de entrada, utilice el tipo de cadena. Por ejemplo:
sString is string CallInterface(<Object address>, <Method number>, sString)
- 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"
- 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 - 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)
- 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:
- Utilice un número entero.
- 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>)
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|