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