【问题标题】:Can't access COM array members in WSH/JScript无法访问 WSH/JScript 中的 COM 数组成员
【发布时间】:2012-10-14 15:57:25
【问题描述】:

我正在尝试通过 Windows 7 上的 WSH 从 JScript 访问 COM 方法返回的数组的成员。

该方法的文档如下(以C#为例):

public System.Array GetValues();

所以根据这个,它返回一个.NET System.Array。这一切都很好,但这是我的代码:

// report is Scripting.FileSystemObject file handle
// var is a COM object
arr = var.GetValues();
val = ??
report.WriteLine(val);

这是我尝试过的:

val = arr.Length      // produces empty string
val = arr.GetLength() // "Object doesn't support this property or method"
val = arr.GetValue(0) // "Object doesn't support this property or method"

显然它不是 System.Array 对象,因为这些方法不起作用。也许它是一个 JScript Array 对象?

val = arr[0]          // empty string
val = arr.length      // empty string
val = arr.pop()       // "Object doesn't support this property or method"

所以它也不是一个 Array 对象?我猜它可能是一个内在类型数组:

val = typeof(arr[0])  // "undefined"
val = typeof(arr)     // "unknown"

作为最后的手段,我将它加载到 Vbsedit 并在那里放置一个断点,Vbsedit 显示一个包含 800 个值的数组!我只是不知道如何访问它们。

【问题讨论】:

    标签: .net com wsh jscript


    【解决方案1】:

    很可能该数组作为 JScript VBArray 对象返回。这样做是因为 JScript Array 对象本质上与 COM 和 VBScript 中使用的 SAFEARRAY 结构非常不同。您可以通过调用toArray 方法将VBArray 转换为JScript 数组:

    var jsArr = arr.toArray();
    

    【讨论】:

      【解决方案2】:

      像往常一样,我在发布问题后不久就找到了答案。这是将任何类型的 Array "arr" 转换为适当的 JScript 数组的解决方案:

      arr = var.GetValues().toArray();
      val = arr[0];
      report.WriteLine(val);
      

      【讨论】:

        猜你喜欢
        • 2021-03-20
        • 2011-04-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2016-05-18
        相关资源
        最近更新 更多