Emisión de un verbo de LUA
El procedimiento siguiente es necesario para emitir un verbo de aplicación de unidad lógica (LUA). En este ejemplo, el verbo emitido es RUI_INIT.
Para emitir un verbo LUA
Cree una variable para la estructura del bloque de control de verbos (VCB). Por ejemplo:
#include <winlua.h> . . struct LUA_VERB_RECORD rui_init;
La estructura LUA_VERB_RECORD se declara en WINLUA. Archivo de encabezado H.
Borrar (establecido en cero) las variables dentro del VCB:
memset( &rui_init, 0, sizeof( rui_init) );
LUA requiere que todos los parámetros reservados y todos los parámetros no requeridos por el verbo que se emita deben establecerse en cero. La manera más sencilla de hacerlo es establecer todo el VCB en ceros antes de establecer los parámetros necesarios para este verbo en particular.
Asigne valores a los parámetros de VCB que proporcionan información a LUA:
rui_init.common.lua_verb = LUA_VERB_RUI; rui_init.common.lua_verb_length = sizeof(struct LUA_COMMON); rui_init.common.lua_opcode = LUA_OPCODE_RUI_INIT; memcpy (rui_init.common.lua_luname, "THISLU ", 8);
Los valores LUA_VERB_RUI y LUA_OPCODE_RUI_INIT son constantes simbólicas. Estas constantes se definen en WINLUA. Archivo de encabezado H en el SDK de Host Integration Server. Para garantizar la portabilidad entre distintos sistemas, use constantes simbólicas y no valores enteros.
Invoque LUA. El único parámetro es un puntero a la dirección de la estructura que contiene el VCB para el verbo deseado.
RUI( &rui_init );
Compruebe la marca asincrónica (rui_init.common.lua_flag2.async) para determinar si el verbo se completó de forma asincrónica. Si se usan eventos y el verbo se completó de forma asincrónica, espere a que se complete el evento.
if (rui_init.common.lua_flag2.async) { /* verb will complete asynchronously so continue with other processing */ /* then wait */ WaitForSingleObject (...) }
No compruebe el código de retorno. Es posible que haya cambiado de LUA_IN_PROGRESS a LUA_OK en el momento en que lo compruebe.
Compruebe las variables devueltas por LUA.
if( rui_init.common.lua_prim_rc == LUA_OK ) { /* Init OK */ . . } else { /* Do error routine */ . . }