質問
私の日常業務の一部は、レガシー VB6 アプリケーションの保守と拡張です。一般的なエンジンは C/C++ で記述されており、VB6 はパフォーマンスを向上させるためにこれらの関数を使用します。
非同期プログラミングに関しては、C インターフェイスだけでは不十分であり、VB6 にイベントを発行するために COM コントロールに依存しています。
私の問題は、VB6 にコントロールを登録すると、VB がこのコントロールをメモリにロードし、VB6 IDE を終了するまでアンロードしないことです。コントロールは常にロードされているため、DLL ファイルがロックされているため、VC6 で再コンパイルできません。
私が見つけた解決策は、VB でコントロールを有効にするのではなく、 CreateObject()
私のコントロールのフルネームで。問題は、VB6 は私が使用しているインターフェイスを何も知らず、IntelliSense にアクセスできないため、コントロールをオブジェクトとして宣言しなければならないことですが、これが面倒です。
アプリケーションを終了した後、または IDE で直接コントロールをアンロードするように VB6 に指示する方法はありますか?
解決
VB6 にコントロールを強制的にアンロードさせる良い方法はないと確信しています。
これが私がやることです...Visual C と Visual Basic を並行して実行する代わりに、VB6 を実行します。 下 VC:
- VCをロードする
- COM オブジェクトを含むプロジェクトを開きます
- 編集、変更など
- VC で、適切なコマンドライン引数を使用して出力実行可能ファイルを VB6.EXE に設定し、VB6 ワークスペースをロードします。
- あとは F5 を押して VB6 IDE を起動し、VB6 プロジェクトをロードするだけです。
- COM コードを再度変更する場合は、VB6.EXE を終了し、変更を加えて、もう一度 F5 キーを押します。ワークスペースを保存している限り、VB6 は開いていたウィンドウとすべてのプロジェクト設定を記憶します。
この方法の利点:
- COM オブジェクトにブレークポイントを設定し、完全なソース デバッガーを使用してデバッグできます。
- C と VB を同時に快適にデバッグできます
- VB6 を実行すると、常に最新バージョンの COM DLL がインストールされます。
所属していません StackOverflow