VB.NETコンポーネントから生成されたイベントを処理するクラスをインスタンス化するVB6コードがあります。 VB6は非常に簡単です:イベントハンドラオブジェクトは、(それがコレクションに格納されている理由である)initメソッドの範囲を超えて生きることを持っていることをVB.NETコードでのVB.NETイベントの処理
private m_eventHandler as new Collection
...
public sub InitSomething()
dim handler as EventHandler
set handler = new EventHandler
m_eventHandler.Add handler
...
m_engine.Start
end sub
注意。 m_engine.Start
は、VB.NETコンポーネントがイベントを発生させ始めるプログラム内のポイントを示します。 (要求されたように)
実際のイベントハンドラ:
Private WithEvents m_SomeClass As SomeClass
Private m_object as Object
...
Private Sub m_SomeClass_SomeEvent(obj As Variant)
Set obj = m_object
End Sub
注EventHandler
のインスタンスが作成されるときm_object
が初期化されます。
イベントを発生させるVB.NETのコードはさらに簡単です:
Public ReadOnly Property SomeProp() As Object
Get
Dim obj As Object
obj = Nothing
RaiseEvent SomeEvent(obj)
SomeProp = obj
End Get
End Property
私の問題は私デバッグ VB6プログラム、初めてInitSomething
が呼び出されたときに、イベントはないということです(VB6イベントハンドラは決して入力されません)。その後のInitSomething
の呼び出しは機能しません。
デバッガの外でプログラムを実行すると、予想どおりに機能します。この時点で、私はこれが私が心配すべき何かであるかどうかも分かりません。
関連性があるかもしれませんが、VB.NETはVisual Studioコード変換ツールを使用してVB6から変換されました(その後、手動でクリーンアップされました)。
実際のイベントハンドラとハンドリングオブジェクトの宣言を表示できますか? ( "WithEvents"を持つもの)? –