2009-07-31 10 views
15

ユニットテストを追加しようとしている古い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 

Doeこの仕事をする方法や、このような状況に対処する別の方法があるかどうかを知っている人は誰ですか?

ITabEventsHandlerというコールバックインターフェイスを実装しました。その後、私は自分のフォームにImplements ITabEventsHandlerを追加

Option Explicit 

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

End Sub 

と私のclsTab初期化子にITabEventsHandlerパラメータとしてフォームを渡す:それはこのようになります。カスタムClick(...)イベントを呼び出す代わりに、mTabEventsHandler.Click(...)に電話することができます。

ありがとうございました!

答えて

10

VB6でソースインターフェイスを「実装する」ことはできません。したがって、短い答えは「いいえ、あなたはできません」です。ダイレクトタイプライブラリの編集でハックすることはできますが、これは非常に素早く醜くなります。

異なる(モック)クラスによってこれらを「実装」する必要がある場合は、あなたのケースでコールバックインタフェースを検討することができます。

+0

私はコールバックインターフェイスを作成することを考えました。これはうまくいくようです。 –

+0

Seconded。 VB6でこれを処理する最もエレガントな方法は、生のイベントの代わりにコールバックインターフェイスを使用することです。 wqwが言うように、Typelibのハッキングはすばやく不快になります。 –

+1

+1。 VB6マニュアルにはImplementsがここでイベントをサポートしていないと記載されています。http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ

関連する問題