如何直接访问VBScript中函数返回的数组
我有一个返回数组的COM对象函数 此代码有效如何直接访问VBScript中函数返回的数组,vbscript,automation,com,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 我认为这里的问题是,通过COM返回的变量数组需要成为VB集合对象,这不会立即发生 当存在中间变量时会发生这种情况,但在表达式
Dim a
a = obj.Foo
MsgBox a(0)
此代码表示没有枚举。这是真的
MsgBox obj.Foo(0)
这也没用
MsgBox (obj.Foo)(0)
问题在于Foo函数是一个简单的属性
是否有直接访问数据成员的语法
编辑:只是为了明确函数是否正常工作,IsArray(obj.Foo)返回true 我认为这里的问题是,通过COM返回的变量数组需要成为VB集合对象,这不会立即发生 当存在中间变量时会发生这种情况,但在表达式的情况下不会发生这种情况。在后一种情况下,VBScript已将其视为对象,但该对象是variant数组上的薄包装器,它还不是集合对象 如果您想要一个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++代码将使用<代码> CCOMQueYU)能够做到像<代码> Obj.FoO(0).GET()/<代码>或<代码> Obj.FoO(0).FrStReStRebug()。由于我不是vb专家,所以我不完全确定您是如何得到结果的,但我相信应该有一些东西可以按照我的建议调用。@AliBeyit不是在VBScript中您不能调用的。这取决于COM对象返回的数据类型,VBScript需要一个
VT_数组
,因此您需要封送COM.D可见的返回类型这回答了你的问题吗?数组是变体的安全数组。否则第一种方法就不起作用了。