我有一个返回数组的COM对象的函数。
此代码有效
Dim a
a = obj.Foo
MsgBox a(0)
此代码表明没有枚举。是的。
MsgBox obj.Foo(0)
这也不起作用
MsgBox (obj.Foo)(0)
问题在于Foo函数是一个简单的属性。
是否存在直接访问数据成员的语法?
编辑:只是为了清楚说明该函数正常工作,IsArray(obj.Foo)返回true!
答案 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
类似的技巧。