Émission d’un verbe LUA
La procédure suivante est requise pour émettre un verbe d’application d’unité logique (LUA). Dans cet exemple, le verbe émis est RUI_INIT.
Pour émettre un verbe LUA
Créez une variable pour la structure de bloc de contrôle verbe (VCB). Par exemple :
#include <winlua.h> . . struct LUA_VERB_RECORD rui_init;
La structure LUA_VERB_RECORD est déclarée dans WINLUA. Fichier d’en-tête H.
Effacez (défini sur zéro) les variables dans le VCB :
memset( &rui_init, 0, sizeof( rui_init) );
LUA exige que tous les paramètres réservés, et tous les paramètres non requis par le verbe émis, soient définis sur zéro. Le moyen le plus simple consiste à définir l’intégralité du VCB sur zéros avant de définir les paramètres requis pour ce verbe particulier.
Affectez des valeurs aux paramètres VCB qui fournissent des informations à 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);
Les valeurs LUA_VERB_RUI et LUA_OPCODE_RUI_INIT sont des constantes symboliques. Ces constantes sont définies dans WINLUA. Fichier d’en-tête H dans le Kit de développement logiciel (SDK) Host Integration Server. Pour garantir la portabilité entre différents systèmes, utilisez des constantes symboliques et non des valeurs entières.
Appelez LUA. Le seul paramètre est un pointeur vers l’adresse de la structure contenant le VCB pour le verbe souhaité.
RUI( &rui_init );
Vérifiez l’indicateur asynchrone (rui_init.common.lua_flag2.async) pour déterminer si le verbe s’est terminé de manière asynchrone. Si des événements sont utilisés et que le verbe s’est terminé de manière asynchrone, attendez que l’événement se termine.
if (rui_init.common.lua_flag2.async) { /* verb will complete asynchronously so continue with other processing */ /* then wait */ WaitForSingleObject (...) }
Ne case activée pas le code de retour. Il est possible qu’il soit passé de LUA_IN_PROGRESS à LUA_OK au moment où vous l’avez case activée.
Vérifiez les variables retournées par LUA.
if( rui_init.common.lua_prim_rc == LUA_OK ) { /* Init OK */ . . } else { /* Do error routine */ . . }