Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何直接访问VBScript中函数返回的数组_Vbscript_Automation_Com - Fatal编程技术网

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

如何直接访问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集合对象,这不会立即发生 当存在中间变量时会发生这种情况,但在表达式

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

此代码有效

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可见的返回类型这回答了你的问题吗?数组是变体的安全数组。否则第一种方法就不起作用了。