recorrer objetos objeto eliminar elementos elemento buscar array agregar javascript com activex

javascript - objetos - ¿Cómo devuelvo una matriz de cadenas de un objeto ActiveX a JScript?



recorrer array de objetos javascript (2)

Necesito llamar a una API de Win32 para obtener una serie de cadenas y me gustaría devolver una matriz de esas cadenas a JavaScript. Esto es para la secuencia de comandos que se ejecuta en la máquina local para las secuencias de comandos de administración, no para el navegador web.

Mi archivo IDL para el objeto COM tiene la interfaz a la que estoy llamando como:

HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);

La función retorna correctamente, pero las cadenas se ''pierden'' cuando se asignan a una variable en JavaScript.

La pregunta es: ¿Cuál es la forma correcta de obtener la matriz de cadenas devuelta a una variable de JavaScript?


Si recuerdo correctamente, deberá envolver el SAFEARRAY en una SAFEARRAY para que pueda pasar, y luego usar un objeto VBArray para descomprimirlo en el lado JS de las cosas:

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray) { // ... _variant_t ret; ret.vt = VT_ARRAY|VT_VARIANT; ret.parray = rgBstrStringArray; *pvarBstrStringArray = ret.Detach(); return S_OK; }

entonces

var jsFriendlyStrings = new VBArray( axOb.GetArrayOfStrings() ).toArray();


Shog9 es correcto. Los scripts COM requieren que todas las salidas sean VARIANTES.

De hecho, también requiere que todas las ENTRADAS sean VARIANTES también: vea los desagradables detalles de IDispatch en su archivo de ayuda favorito. Solo se piensa que la magia de la implementación de Dual Interface por parte de ATL y capas similares (lo que probablemente es lo que estás usando) no te tiene que preocupar por eso. Los VARIANTES de entrada pasados ​​por el código de llamada se convierten para que coincidan con la firma de su método antes de que se llame a su método real.