VB6 Реализация и события

У меня есть старый проект VB6, в который я пытаюсь добавить модульные тесты. Я разрывал зависимости в классах насмешливыми объектами. Все было здорово, пока я не нашел некоторые зависимости, которые поднимали события, и теперь я ударил стену.

Вот краткий пример того, что я пытаюсь сделать, НЕ РАБОТАЕТ:

ITab.cls:

Option Explicit

Public Event Click(tabNumber As Integer)

Public Sub SomeOtherFunction()

End Sub

clsRealTab.cls:

Option Explicit
Implements ITab

Public Event Click(tabNumber As Integer)

Public Sub ITab_SomeOtherFunction()
    'code here'
End Sub

frmMain.frm:

Option Explicit

Private WithEvents mTab as ITab

Public Sub Main()
    Set mTab = New clsRealTab 'gives "Object or class does not support the set of events" error'
End Sub

Кто-нибудь знает, есть ли способ сделать эту работу или другой способ справиться с этой ситуацией?

Я реализовал интерфейс обратного вызова, который я назвал ITabEventsHandler. Это выглядит так:

Option Explicit

Public Sub Click(intPreviousTab As Integer, objSSTab As Object)

End Sub

Затем я добавил Implements ITabEventsHandler в мою форму и передал форму как параметр ITabEventsHandler в свой инициализатор clsTab. Вместо создания пользовательского события Click(...) я могу просто позвонить mTabEventsHandler.Click(...).

Спасибо за предложение!

Ответы

Ответ 1

Вы не можете "реализовать" исходные интерфейсы в VB6 вообще. Поэтому короткий ответ: "Нет, вы не можете этого сделать". Вы можете взломать его с помощью прямого редактирования typelib, но это станет очень уродливым очень быстро.

Вы можете рассматривать интерфейсы обратного вызова в своем случае, если вам нужно "реализовать" их разными (макетными) классами.