So geben Sie ein Array von Strings
korrekt von einem ActiveX-Objekt an JScript zurück
Wenn Sie mit einer Win32-API arbeiten und ein Array von Strings von einem ActiveX-Objekt an JScript zurückgeben müssen, können Sie auf einige Herausforderungen stoßen. Dieses Problem tritt typischerweise auf, wenn die Strings während der Übertragung ‘verloren’ zu gehen scheinen. Das Verständnis der Beziehungen zwischen COM-Objekten, ActiveX und JScript ist entscheidend für eine erfolgreiche Datenverarbeitung in diesen Umgebungen. In diesem Blogbeitrag werden wir den richtigen Ansatz durchgehen, um dies zu erreichen.
Das Problem
Sie haben ein Interface in Ihrer IDL (Interface Definition Language)-Datei für ein COM-Objekt definiert, das eine Methode enthält, die ein Array von Strings zurückgibt. Genauer gesagt sieht die Funktionssignatur wie folgt aus:
HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);
Obwohl die Funktion selbst korrekt funktioniert, tritt das Problem auf, wenn die Strings einer Variablen in JavaScript zugewiesen werden, was dazu führt, dass die Strings scheinbar verloren gehen. Wir müssen sicherstellen, dass die Daten korrekt übertragen werden.
Die Lösung
Um das Array von Strings von Ihrem ActiveX-Objekt an JScript korrekt zu übergeben, folgen Sie diesen detaillierten Schritten:
Schritt 1: Wickeln Sie das SAFEARRAY in einen VARIANT ein
Um die Kommunikation zwischen dem COM-Objekt und JScript zu erleichtern, müssen Sie das SAFEARRAY
in einen VARIANT
einwickeln, bevor Sie es zurückgeben. Dadurch kann das Array ordnungsgemäß behandelt werden und es wird sichergestellt, dass keine Daten verloren gehen. Unten steht der modifizierte Funktionscode, um dies zu erreichen:
HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
// Deklarieren Sie einen Variant, um das Array zu halten.
_variant_t ret;
// Setzen Sie den Variant-Typ auf ein Array von Variants.
ret.vt = VT_ARRAY | VT_VARIANT;
ret.parray = rgBstrStringArray; // Weisen Sie das SAFEARRAY zu.
*pvarBstrStringArray = ret.Detach(); // Trennen Sie es zur Rückgabe.
return S_OK; // Erfolgreich zurückgeben.
}
Schritt 2: Verwenden Sie VBArray in JScript
Sobald die Daten in einem VARIANT verpackt und erfolgreich von ActiveX zurückgegeben wurden, können Sie das VBArray
-Objekt in Ihrem JScript-Code verwenden, um die Daten ordnungsgemäß zu entpacken. Die benötigte Codezeile lautet:
var jsFriendlyStrings = new VBArray(axOb.GetArrayOfStrings()).toArray();
Diese einzelne Zeile konvertiert das zurückgegebene VARIANT effektiv in ein JavaScript-freundliches Array von Strings, sodass Sie die Daten nach Bedarf verarbeiten können.
Fazit
Die Handhabung der Übertragung eines Arrays von Strings von einem ActiveX-Objekt an JScript kommt darauf an, zu verstehen, wie man mit COM-Objekten und JavaScript-Interaktionen umgeht. Indem Sie Ihr SAFEARRAY
in einen VARIANT
einwickeln und das VBArray
verwenden, um es zu entpacken, können Sie sicherstellen, dass alle Daten korrekt und ohne Verlust übergeben werden.
Jetzt sollten Sie mit dem richtigen Ansatz ausgestattet sein, um Arrays von Strings in Ihren administrativen Skripten erfolgreich zurückzugeben und zu nutzen. Viel Spaß beim Programmieren!