首页 / 知识

关于javascript:如何将字符串数组从ActiveX对象返回到JScript

2023-04-14 06:56:00

关于javascript:如何将字符串数组从ActiveX对象返回到JScript

How do I return an array of strings from an ActiveX object to JScript

我需要调用Win32 API来获取一系列字符串,并且我想将这些字符串的数组返回给JavaScript。 这适用于在本地计算机上运行的脚本,而不是Web浏览器。

我的COM对象IDL文件具有我要调用的接口:

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

该函数正确返回,但是在将字符串分配给JavaScript中的变量时,字符串已"丢失"。

问题是:
将字符串数组返回给JavaScript变量的正确方法是什么?
------------------------


如果我没记错的话,您需要将SAFEARRAY包裹在VARIANT中才能通过,然后使用VBArray对象在JS方面解压缩它:

1
2
3
4
5
6
7
8
9
10
HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // ...

   _variant_t ret;
   ret.vt = VT_ARRAY|VT_VARIANT;
   ret.parray = rgBstrStringArray;
   *pvarBstrStringArray = ret.Detach();
   return S_OK;
}

然后

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


刺9
是正确的。 COM脚本要求所有输出均为VARIANTS。

实际上,它还要求所有INPUT都同样是VARIANTS -请在您喜欢的帮助文件中查看IDispatch的详细信息。 只需考虑到ATL和类似层(很可能是您在使用的层)实现双接口的神奇之处,您就不必为此担心。 在调用实际方法之前,将调用代码传递的输入VARIANT转换为与您的方法签名匹配。


字符串数组对象字符串数组

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢