Доступ к элементу коллекции VB6 из VBScript, встроенного в HTML - PullRequest
1 голос
/ 26 августа 2010

Я учусь на практике.Мне дали файл OCX, который в соответствии с тем, кто дал его мне, был создан с использованием VB6, и у меня есть задача создать пользовательский интерфейс для него, чтобы проверить все функциональные возможности, описанные в плохо написанном файле документации.Кроме того, я не очень хорошо разбираюсь в VBScript, но мне удалось избежать нескольких пуль во время обучения.

У меня есть метод, который возвращает Collection, и когда я пытаюсь получить к нему доступ из VBScriptЯ могу только запросить Count, но когда я пытаюсь выполнить job.Item(i) или job(i), я получаю сообщение об ошибке, в котором говорится, что у него нет этого свойства или метода.

Может кто-то указать мне направильное направление, чтобы иметь возможность просматривать содержимое этой коллекции?

Мне пришлось сделать это из JavaScript, но поскольку некоторые вещи были не так просты, я решил, что, возможно, VBScript поможет мне преодолеть пробелы, где JavaScript не 'не обрезай это.Я могу получить доступ ко всем свойствам из ActiveXObject из JavaScript, но методы, которые возвращают другие объекты VB, для меня немного более неясны.Я пробовал aJob.Item(iCount), aJob.Items(iCount) и aJob(iCount).

Мой код:

For iCount = 1 To aJobs.Count
     MsgBox("Num " & iCount)
     MsgBox(aJobs.Item(iCount))
Next

Спасибо.

1 Ответ

1 голос
/ 27 августа 2010

Люди часто создают специализированные и / или строго типизированные классы коллекций в VB6. Хотя они не всегда делают это правильно, и иногда создают «частичные» реализации коллекции, у которых нет метода Item () (или они не могут пометить его как член класса по умолчанию). Они могут даже иметь похожий метод или свойство, но назвать его чем-то совершенно другим.

Реже вернуть необработанный объект Collection, но это можно сделать, и если это так, у вас не должно быть проблем, указанных в VBScript.

Я только что создал проект DLL с именем "HallLib" с тремя классами: 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, чтобы увидеть, какие классы и члены он фактически предоставляет.

...