1

我正在尝试通过 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 个值的数组!我只是不知道如何访问它们。

4

2 回答 2

2

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

arr = var.GetValues().toArray();
val = arr[0];
report.WriteLine(val);
于 2012-10-24T15:29:24.097 回答
2

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

var jsArr = arr.toArray();
于 2012-10-25T05:17:33.673 回答