モードレスVB6アプリケーションは、アプリケーションのシャットダウン時にどのようにクリーンアップを実行できますか?


0

VB6アプリケーションでは、Interop Forms Toolkitを使用して.NETで書かれたフォームを処理しています。ツールキットのドキュメントでは、VB6アプリケーションがシャットダウンしているときに、ツールキットのメソッドを呼び出してツールキットにアドバイスするよう勧めています。

VB6アプリケーションは、スプラッシュ画面を読み込んでいくつかのモードレスフォームを表示するSub Mainプロシージャを使用します。 Sub Mainが完了すると、アプリケーションはまだ実行中です。アプリケーションがシャットダウンしていることをアプリケーションがどのように検出し、ツールキットのクリーンアップメソッドを呼び出すことができますか?

  0

*締め切り - 校正してください。 23 9月. 082008-09-23 20:47:29

2

モジュール(おそらくSub Mainを含むもの)に、クリーンアップコードを保持する公開サブ(たとえばAppCleanUp)を作成します。

プロジェクトにクラスを追加します(例:clsAppCleanup)。このクラスでは、前の手順で作成したサブクラスを呼び出すClass_Terminateイベントハンドラにコードを追加します。

モジュール(おそらくSub Mainを含むものと同じモジュール)で、clsAppCleanupの変数を定義します。

サブメインでは、clsAppCleanupをインスタンス化します。

アプリケーションがシャットダウンすると、クラスのterminateイベントによってクリーンアップコードが実行されます。


0

私はVB6で書いて以来、しばらくしてきましたが、私が正しく覚えていれば、Unloadイベントを使ってクリーンアップコード(.netの終了イベントに似ています)を呼び出すことができます。まだ実行中のVB6アプリに他のフォームがないことを確認することもできます。

  0

Unloadイベントはフォーム内で発生します。アプリはいくつかのフォームを表示しています。私は、アプリケーションに400以上のフォームが存在するため、アプリケーションがシャットダウンしていることを検出するための中心的な場所を探しています。 23 9月. 082008-09-23 20:45:28


0

FormCount変数を含むモジュールを作成します。この変数は、アプリケーションのすべてのフォームで共有されます。フォームのForm_InitializeメソッドでFormCount変数をインクリメントします。すべてのフォームのForm_TerminateメソッドでFormCountを減らします。 FormCountが0に戻ると、フォームがアンロードされたことをフォームツールキットに通知できます。

VB6ではシングルスレッドアプリケーションが作成されるため、マルチスレッドの問題については心配する必要はありません。そのため、あるフォームのInitialize(またはTerminate)メソッドは、他のフォームが実行を開始する前に完了します。