2009-07-31 9 views
15

Tengo un proyecto VB6 más antiguo al que intento agregar pruebas unitarias. Estaba rompiendo dependencias en clases burlando objetos. Todo iba bien hasta que encontré algunas dependencias que estaban generando eventos y ahora me he topado con una pared.VB6 Implementos y eventos

Aquí está un ejemplo rápido de lo que estoy tratando de hacer eso no funciona:

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 ¿Alguien sabe si hay una forma de hacer que esto funcione u otra forma de manejar esta situación?

Implementé una interfaz de devolución de llamada que llamé ITabEventsHandler. Se ve así:

Option Explicit 

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

End Sub 

Luego añade Implements ITabEventsHandler a mi forma y pasan la forma como un parámetro de ITabEventsHandler a mi inicializador clsTab. En lugar de plantear un evento personalizado Click(...), solo puedo llamar al mTabEventsHandler.Click(...).

Gracias por la sugerencia!

Respuesta

10

No se puede "implementar" las interfaces de origen en VB6. Entonces la respuesta corta es "no, no puedes hacer esto". Puede hackearlo con la edición directa de TypeLib, pero esto se pondrá feo muy rápidamente.

Puede considerar interfaces de devolución de llamada en su caso si tiene que "implementar" estas por clases diferentes (simuladas).

+0

Pensé en hacer una interfaz de devolución de llamada y parece que esto funcionará. –

+0

Secundado. La forma más elegante de lidiar con esto en VB6 es usar una interfaz de devolución de llamada en lugar de eventos sin procesar. El pirateo de TypeLib se pondrá rápidamente desagradable como dice wqw. –

+1

+1. El manual de VB6 dice que Implements no admite eventos aquí http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ