Comment retourner correctement un tableau de chaînes
d’un objet ActiveX vers JScript
Si vous travaillez avec une API Win32 et devez retourner un tableau de chaînes d’un objet ActiveX vers JScript, vous pourriez rencontrer quelques défis. Ce problème survient généralement lorsque les chaînes semblent être ‘perdues’ durant le transfert. Comprendre la relation entre les objets COM, ActiveX et JScript est crucial pour une gestion réussie des données dans ces environnements. Dans cet article, nous allons passer en revue l’approche correcte pour y parvenir.
Le Problème
Vous avez défini une interface dans votre fichier IDL (Interface Definition Language) pour un objet COM qui inclut une méthode renvoyant un tableau de chaînes. Plus précisément, la signature de la fonction apparaît comme suit :
HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);
Bien que la fonction elle-même fonctionne correctement, le problème réside dans le fait que les chaînes sont assignées à une variable en JavaScript, entraînant la perte apparente des chaînes. Nous devons nous assurer que les données sont transférées correctement.
La Solution
Pour passer correctement le tableau de chaînes de votre objet ActiveX vers JScript, suivez ces étapes détaillées :
Étape 1 : Enveloppez le SAFEARRAY dans un VARIANT
Pour faciliter la communication entre l’objet COM et JScript, vous devez envelopper le SAFEARRAY
dans un VARIANT
avant de le renvoyer. Cela permet de gérer correctement le tableau et de garantir qu’aucune perte de données n’intervienne. Voici le code de fonction modifié pour y parvenir :
HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
// Déclarez un variant pour contenir le tableau.
_variant_t ret;
// Définissez le type de variant comme un tableau de variants.
ret.vt = VT_ARRAY | VT_VARIANT;
ret.parray = rgBstrStringArray; // Assignez le SAFEARRAY.
*pvarBstrStringArray = ret.Detach(); // Détachez-le pour le retour.
return S_OK; // Renvoie le succès.
}
Étape 2 : Utilisez VBArray dans JScript
Une fois les données enveloppées dans un VARIANT et renvoyées avec succès depuis ActiveX, vous pouvez utiliser l’objet VBArray
dans votre code JScript pour déballer correctement les données. La ligne de code dont vous aurez besoin est :
var jsFriendlyStrings = new VBArray(axOb.GetArrayOfStrings()).toArray();
Cette ligne de code convertit efficacement le VARIANT renvoyé en un tableau de chaînes compatible avec JavaScript, vous permettant de gérer les données comme souhaité.
Conclusion
Gérer le transfert d’un tableau de chaînes d’un objet ActiveX vers JScript revient à comprendre comment manipuler des objets COM et les interactions JavaScript. En enveloppant votre SAFEARRAY
dans un VARIANT
et en utilisant le VBArray
pour le déballer, vous pouvez vous assurer que toutes les données sont correctement transmises sans perte.
Vous devriez maintenant être équipé de la bonne approche pour retourner et utiliser avec succès des tableaux de chaînes dans vos scripts administratifs. Bon codage !