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

关于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转换为与您的方法签名匹配。


推荐阅读

    字符库快捷键|字符串快捷键

    字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行注释是 #Mac的快捷键是 command+/windows的快捷键是 Ctrl + /2、多行注

    联想垫a2207如何调用a2207平板评价

    联想垫a2207如何调用a2207平板评价,,联想a2207垫在1600 3G双网双待平板电脑的位置。作为以前的热门产品a2107升级版,a2207处理器取得了可观

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法

    数列求和快捷键|数组求和快捷键

    数列求和快捷键|数组求和快捷键,,数组求和快捷键1,这是文本型数组直接运算 不可能 除非单个的取出来分割后转数值型,再找相同的X[1],进行X[2

    Java创建对象的几种方式

    Java创建对象的几种方式,对象,方法,本文目录Java创建对象的几种方式java中几种创建对象的方式1Java中创建对象的集中方式有那些JAVA创建对