【问题标题】:How to access array elements of SAFEARRAY from MS JScript?如何从 MS JScript 访问 SAFEARRAY 的数组元素?
【发布时间】:2022-11-11 00:58:07
【问题描述】:

COM 对象存在于 DLL 中。它的 IDL 大致如下:

[
    object,
    uuid(51EB4046-221E-45EF-BD63-0D31B163647C),
    oleautomation,
    dual,
    pointer_default(unique)
]
interface IOne2OneNode : IDispatch
{
    // ...
    [propget, id(2), helpstring("property Vector")] HRESULT Vector([out, retval] VARIANT *pVal);
};

DLL 用VT_R8SAFEARRAY 填充*pVal(使用COleSafeArray)。

我想从使用 cscript.exe 执行的 JScript 脚本中访问数组元素。

我试过node.Vector[1],但它报告

TestIDispatch.wsf(115, 2) runtime error in Microsoft JScript: 'node.Vector' is Null or not an object

(模数德语到英语的翻译错误)。 此外,typeof node.Vector 报告unknown

阅读this answer后,我尝试了

var vec = new VBArray(node.Vector).toArray();

但它报告runtime error in Microsoft JScript: VBArray expected

如何从 JScript 访问数组元素?

【问题讨论】:

    标签: com jscript safearray


    【解决方案1】:

    JScript 只能处理元素类型为VT_VARIANTSAFEARRAYs。任何其他元素类型都是不兼容的。

    使用转换返回的数组是正确的

    var vec = new VBArray(node.Vector).toArray();
    

    但是COM服务器必须创建一个VARIANTs的数组,即输入代码VT_VARIANTVT_R8 最终会出现类型不匹配错误。

    在对this post 的回复中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多