人们经常在VB6中创建专门的和/或强类型的集合类。尽管它们并不总是正确地执行,并且它们有时会创建没有Item()方法(或无法将其标记为类的默认成员)的“部分”集合实现。他们甚至可能有类似的方法或财产,但命名完全不同。
返回一个原始集合对象很少见,但它可以完成,如果是的话,你应该没有你从VBScript指出的问题。
我刚刚创建了一个名为“HallLib”的DLL项目,它有三个类:走廊,DoorKnobs和DoorKnob。 DoorKnobs类是DoorKnob对象的集合。走廊类有一个DoorKnobs对象,它用随机设置的随机设置的属性随机设置一个DoorKnob对象进行初始化。 Hallway.DoorKnobs()返回DoorKnobs集合对象作为结果。
它工作正常,在此脚本:
Option Explicit
Dim Hallway, DoorKnobs, DoorKnob
Set Hallway = CreateObject("HallLib.Hallway")
Set DoorKnobs = Hallway.DoorKnobs()
MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count)
For Each DoorKnob In DoorKnobs
MsgBox "DoorKnob.Material = " & CStr(DoorKnob.Material) & vbNewLine _
& "DoorKnob.Color = " & CStr(DoorKnob.Color)
Next
更新:
这个脚本会产生相同的结果:
Option Explicit
Dim Hallway, DoorKnobs, KnobIndex
Set Hallway = CreateObject("HallLib.Hallway")
Set DoorKnobs = Hallway.DoorKnobs()
MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count)
For KnobIndex = 1 To DoorKnobs.Count
With DoorKnobs.Item(KnobIndex)
MsgBox "DoorKnob.Material = " & CStr(.Material) & vbNewLine _
& "DoorKnob.Color = " & CStr(.Color)
End With
Next
一样:
Option Explicit
Dim Hallway, DoorKnobs, KnobIndex
Set Hallway = CreateObject("HallLib.Hallway")
Set DoorKnobs = Hallway.DoorKnobs()
MsgBox "DoorKnobs.Count = " & CStr(DoorKnobs.Count)
For KnobIndex = 1 To DoorKnobs.Count
With DoorKnobs(KnobIndex)
MsgBox "DoorKnob.Material = " & CStr(.Material) & vbNewLine _
& "DoorKnob.Color = " & CStr(.Color)
End With
Next
所以我怀疑你需要使用OLEView之类的类型库浏览器来查看你的OCX,看看它实际暴露的类和成员。