Considérations relatives aux interfaces standard et améliorées
Il n'y a aucune différence fonctionnelle entre les interfaces EHLLAPI standard et améliorées sur une plateforme donnée. Il existe cependant d’autres différences importantes :
- L'interface EHLLAPI améliorée étend l'ID de l'espace de présentation (PSID) de 1 octet à 4 octets. Actuellement, les octets supplémentaires ne sont pas utilisés, mais votre application doit les définir sur des zéros binaires pour garantir la compatibilité avec les futures versions de l'interface EHLLAPI améliorée.
- La position (décalage) des éléments de données dans les tampons mémoire transmis vers et depuis les fonctions EHLLAPI est différente. Les éléments de données dans l'interface EHLLAPI améliorée sont alignés sur les limites double-mot. Les éléments de données de l'interface EHLLAPI standard ne sont pas alignés de manière particulière. Les applications EHLLAPI ne doivent pas être codées pour définir ou récupérer des données dans les tampons par valeurs de décalage (octets). Au lieu de cela, les structures de données fournies dans le fichier HAPI_C.H doivent être utilisées pour définir et récupérer des éléments de données. Cela garantira que les données sont définies et récupérées à partir de la position correcte pour les programmes 16 et 32 bits.
En pré-remplissant les tampons de données EHLLAPI avec des zéros binaires et en utilisant les structures de données fournies dans HAPI_C.H, une application peut être compilée pour un fonctionnement standard ou amélioré sans aucune modification du code source. Par exemple, la section suivante du code fonctionnerait pour l'interface EHLLAPI standard mais échouerait pour l'interface EHLLAPI améliorée :
#include "hapi_c.h" ... int Func, Len, Rc; char Buff[18]; char SessType; Func = HA_QUERY_SESSION_STATUS; // Function Len = 18; // Buffer length Rc = 0; Buff[0] = 'A' // Session to query hllapi(&Func, Buff, &Len, &Rc); // Execute function SessType = Buff[9]; // Get session type ...L'exemple ci-dessus échouerait s'il était compilé en tant qu'application EHLLAPI améliorée, car :
- L'application ne définit pas les octets de l'ID de session étendu sur zéro.
- La longueur du tampon pour cette fonction est de 20 et non de 18.
- L'indicateur de type de session n'est pas au décalage 9 dans le tampon de données, il est au décalage 12.
Ce qui suit est la même fonction écrite pour fonctionner correctement si elle est compilée pour un fonctionnement standard ou amélioré. Les lignes modifiées sont indiquées par un > :
#include "hapi_c.h" ... int Func, Len, Rc; > struct HLDQuerySessionStatus Buff; char SessType; Func = HA_QUERY_SESSION_STATUS; // Function > Len = sizeof(Buff); // Buffer length Rc = 0; > memset(&Buff, 0x00, sizeof(Buff));// Zero buffer > Buff.qsst_shortname = 'A'; // Session to query hllapi(&Func, (char *)&Buff, &Len, &Rc); // Execute function > SessType = Buff.qsst_sestype; // Get session type ...