从嵌入在HTML中的VBScript访问VB6集合项

时间:2010-08-25 23:29:33

标签: collections vb6 vbscript

我正在通过练习来学习。我得到了一个OCX文件,根据谁给我的文件是使用VB6创建的,我的任务是为它创建一个用户界面来测试编写得不好的文档文件中描述的所有功能。最重要的是,我并不精通VBScript,但我在学习的过程中设法躲过几颗子弹。

我有一个返回Collection的方法,当我尝试从VBScript访问它时,我只能查询Count但是当我尝试job.Item(i)或{{ 1}}我收到一条错误,指出它没有该属性或方法。

有人能指出我正确的方向能够遍历这个集合的内容吗?

我必须从JavaScript开始,但由于有些事情并不那么容易,我认为也许VBScript可以帮助我填补JavaScript没有削减它的空白。我可以从JavaScript访问ActiveXObject的所有属性,但返回其他VB对象的方法对我来说更加模糊。我尝试过job(i)aJob.Item(iCount)aJob.Items(iCount)

我的代码是:

aJob(iCount)

感谢。

1 个答案:

答案 0 :(得分:1)

人们经常在VB6中创建专门的和/或强类型的集合类。但是它们并不总是正确地执行它们,并且它们有时会创建没有Item()方法的“部分”集合实现(或者无法将其标记为类的默认成员)。他们甚至可能有类似的方法或属性,但将它命名为完全不同的东西。

返回一个原始的Collection对象是很少见的,但它可以完成,如果是,你不应该有你从VBScript中指出的问题。

我刚刚创建了一个名为“HallLib”的DLL项目,其中包含三个类:Hallway,DoorKnobs和DoorKnob。 DoorKnobs类是DoorKnob对象的集合。 Hallway类有一个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以查看它实际暴露的类和成员。