如何直接访问从VBScript中的函数返回的数组

时间:2019-12-18 10:31:29

标签: vbscript automation com

我有一个返回数组的COM对象的函数。

此代码有效

Dim a
a = obj.Foo
MsgBox a(0)

此代码表明没有枚举。是的。

MsgBox obj.Foo(0)

这也不起作用

MsgBox (obj.Foo)(0)

问题在于Foo函数是一个简单的属性。

是否存在直接访问数据成员的语法?

编辑:只是为了清楚说明该函数正常工作,IsArray(obj.Foo)返回true!

1 个答案:

答案 0 :(得分:0)

我相信这里的问题是,通过COM返回的变量数组需要成为VB集合对象,这不会立即发生。

它在有中间变量时发生,但在表达式情况下还没有发生。在后一种情况下,VBScript已经可以将其视为对象,但是该对象是变量数组的瘦包装,并且它还不是集合对象。

如果您想要一个VBS衬板,这可以解决:

Function TrueArray(ByVal Value)
  TrueArray = Value
End Function

'MsgBox obj.Foo(0) -- Object not a collection: 'obj.Foo'
MsgBox TrueArray(obj.Foo)(0)

您还可以在属性实现的另一侧实现一个集合,然后返回它而不是安全数组(ATL C ++代码将使用CComEnum<IEnumVARIANT...帮助器example)。

我意识到您的问题更多是关于执行所需转换的内置脚本语言功能。也许您可以使用一些内置函数来执行与以上TrueArray类似的技巧。