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, но это станет очень уродливым очень быстро.
Вы можете рассматривать интерфейсы обратного вызова в своем случае, если вам нужно "реализовать" их разными (макетными) классами.