无法访问WSH / JScript中的COM数组成员

时间:2012-10-24 15:11:55

标签: .net com wsh jscript

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

var jsArr = arr.toArray();