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

StackOverflow https://stackoverflow.com/questions/123688

質問

VB6 アプリケーションは、Interop Forms Toolkit を使用して、.NET で作成されたフォームを操作します。ツールキットのドキュメントでは、VB6 アプリケーションがシャットダウンするときにツールキットのメソッドを呼び出してツールキットに通知することが推奨されています。

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

役に立ちましたか?

解決

モジュール (おそらく Sub Main を含むものと同じもの) で、クリーンアップ コードを保持するパブリック サブルーチン (AppCleanUp など) を作成します。

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

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

Sub Main で、clsAppCleanup をインスタンス化します。

アプリがシャットダウンしているとき、クラスの終了イベントによりクリーンアップ コードが実行されます。

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top