2009-07-31 11 views
15

Ho un progetto VB6 più vecchio a cui sto cercando di aggiungere i test unitari. Stavo distruggendo le dipendenze nelle classi prendendo in giro oggetti. Tutto stava andando alla grande fino a quando ho trovato alcune dipendenze che stavano sollevando eventi e ora ho colpito un muro.VB6 Attrezzi ed eventi

Ecco un rapido esempio di quello che sto cercando di fare che non funziona:

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 

Doe Qualcuno sa se c'è un modo per fare questo lavoro o un altro modo per gestire questa situazione?

Ho implementato un'interfaccia di callback che ho chiamato ITabEventsHandler. Ecco come si presenta:

Option Explicit 

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

End Sub 

poi ho aggiunto Implements ITabEventsHandler alla mia forma e passare il modulo come parametro di ITabEventsHandler al mio clsTab initializer. Invece di aumentare un evento personalizzato Click(...), posso semplicemente chiamare mTabEventsHandler.Click(...).

Grazie per il suggerimento!

risposta

10

Non è possibile "implementare" le interfacce di origine in VB6. Quindi la risposta breve è "no, non puoi farlo". Puoi modificarlo con il direct typelib editing, ma questo diventerà brutto molto rapidamente.

È possibile considerare le interfacce di callback nel caso in cui si debbano "implementarle" per classi diverse (simulate).

+0

Ho pensato di creare un'interfaccia di callback e sembra che funzioni. –

+0

Secondato. Il modo più elegante per gestire questo in VB6 è utilizzare un'interfaccia di callback invece di eventi non elaborati. L'hacking dei tipi di digiuno diventerà presto pericoloso come dice wqw. –

+1

+1. Il manuale VB6 afferma che gli strumenti Implements non supportano gli eventi qui http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ