2009-07-31 15 views
15

Birim testler eklemeye çalıştığım eski bir VB6 projem var. Nesnelerle alay ederek sınıfta bağımlılıkları kırıyordum. Olayları arttıran bazı bağımlılıklar bulana kadar her şey yolunda gidiyordu ve şimdi bir duvara çarptım.VB6 Implements & events

İşte o DOESNT'İŞ yapmaya çalışıyorum şeyin kısa bir örnek:

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 Bu işi yapmanın bir yolu ya da bu durumu ele almak için başka bir yol olup olmadığını bilen var mı?

ITabEventsHandler'u aradığım bir geri çağırma arabirimini uygulamıyorum. Bu şuna benzer:

Option Explicit 

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

End Sub 

Sonra benim forma Implements ITabEventsHandler eklendi ve benim clsTab başlatıcısı bir ITabEventsHandler parametre olarak formu geçmektedir. Özel bir Click(...) etkinliğini yükseltmek yerine, mTabEventsHandler.Click(...) numaralı telefonu arayabilirim.

Öneri için teşekkürler!

cevap

10

VB6'da kaynak arabirimlerini "uygulayamazsınız". Yani kısa cevap "hayır, bunu yapamazsın". Doğrudan typelib düzenleme ile kesebilirsiniz ama bu çok çabuk çirkin olur.

Farklı (sahte) sınıflar tarafından "uygulamak" durumunda, durumunuzda geri arama arabirimlerini dikkate alabilirsiniz.

+0

Bir geri arama arayüzü yapma konusunda düşünce ve bu çalışacaktır gibi görünüyor. –

+0

Saniye. VB6'da bununla baş etmenin en zarif yolu, ham olaylar yerine bir geri arama arabirimi kullanmaktır. Typelib hacking, wqw'nin dediği gibi çabucak kötü olacak. –

+1

+1. VB6 kılavuzu, Implements'ın buradaki etkinlikleri desteklemediğini söyler: http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ