Javascript 如何将字符串数组从ActiveX对象返回到JScript
我需要调用Win32 API来获取一系列字符串,我想将这些字符串的数组返回给JavaScript。这适用于在本地计算机上运行的用于管理脚本的脚本,而不是用于web浏览器 COM对象的IDL文件具有我正在调用的接口,如下所示: HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray); HRESULT GetArrayOfString([out,retval]SAFEARRAY(BSTR)*rgBstrStringArray); 函数返回正确,但字符串在JavaScript中被分配给变量时“丢失” 问题是: 获取返回给JavaScript变量的字符串数组的正确方法是什么?Javascript 如何将字符串数组从ActiveX对象返回到JScript,javascript,com,activex,Javascript,Com,Activex,我需要调用Win32 API来获取一系列字符串,我想将这些字符串的数组返回给JavaScript。这适用于在本地计算机上运行的用于管理脚本的脚本,而不是用于web浏览器 COM对象的IDL文件具有我正在调用的接口,如下所示: HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray); HRESULT GetArrayOfString([out,retval]SAFEARRAY(BSTR)*rgBstr
如果我没记错的话,您需要将
安全数组
包装成一个变体,以便它能够通过,然后使用a在事物的JS端解包:
HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
// ...
_variant_t ret;
ret.vt = VT_ARRAY|VT_VARIANT;
ret.parray = rgBstrStringArray;
*pvarBstrStringArray = ret.Detach();
return S_OK;
}
然后
这是正确的。COM脚本要求所有输出都是变体
事实上,它还要求所有的输入也必须是变体——请在您最喜欢的帮助文件中查看IDispatch的详细信息。只需考虑ATL和类似层(很可能就是您正在使用的层)的双接口实现的魔力,您就不必担心这一点。在调用实际方法之前,调用代码传递的输入变量将被转换为与方法签名匹配。返回的ret.Detach()语句是否应为>pvarBstrStringArray=ret.Detach();谢谢
var jsFriendlyStrings = new VBArray( axOb.GetArrayOfStrings() ).toArray();