Partager via


Émission d’un verbe LUA

La procédure suivante est nécessaire pour émettre un verbe d’application d’unité logique (LUA). Dans cet exemple, le verbe émis est RUI_INIT.

Pour émettre un verbe LUA

  1. 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;  
    
    
  2. La structure LUA_VERB_RECORD est déclarée dans le fichier d’en-tête WINLUA.H.

  3. 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. La méthode la plus simple consiste à définir l’intégralité du VCB sur zéro avant de définir les paramètres requis pour ce verbe particulier.

  4. 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 le fichier d’en-tête WINLUA.H du Host Integration Server SDK. Pour garantir la portabilité entre différents systèmes, utilisez des constantes symboliques et non des valeurs entières.

  5. 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 );  
    
  6. Vérifiez l’indicateur asynchrone (rui_init.common.lua_flag2.async) pour déterminer si le verbe s’est terminé de façon asynchrone. Si des événements sont utilisés et que le verbe s'est achevé de façon asynchrone, patientez que l'événement s'achève.

    if (rui_init.common.lua_flag2.async)  
    {  
    /* verb will complete asynchronously so continue  
    with other processing */  
    /* then wait */  
    WaitForSingleObject (...)  
    }  
    

    Ne vérifiez pas le code de retour. Il a peut-être changé de LUA_IN_PROGRESS à LUA_OK au moment où vous le vérifiez.

  7. Vérifiez les variables retournées par LUA.

    if( rui_init.common.lua_prim_rc == LUA_OK )  
    {  
    /* Init OK */  
            .  
            .  
    }   
    else  
    {  
    /* Do error routine */  
            .  
            .  
    }