分離展開でネイティブ COM dll のいくつかのクラスを使用するアプリケーションがあります。
簡略化:
実行時に、マニフェスト ファイルを含む dll を登録せずに特定のディレクトリにダウンロードします。
次に、そのディレクトリを指すアクティベーション コンテキストを作成し、その後、dll からクラスのインスタンスを作成します。
クラスAを作成し、しばらくしてクラスBを作成するとしましょう。
この流れですべてうまくいきます。
アプリケーションを WinForm に変更したときに問題が発生しました。「ボタン 1」が押されると、前と同じようにアクティベーション コンテキストを作成し、次にクラス A のインスタンスを作成します。これはうまく機能し、フローは WinForm に戻ります。ただし、「ボタン 2」を押すと、クラス B の作成に失敗します。クラスが見つからないという例外が発生します。
そのため、WinForm が何らかの形で私のアクティベーション コンテキストを台無しにしているようです。
何故ですか?そこで何が起こっているのですか?
それを回避する方法はありますか?
いくつかのメモ:
sxstrace.exe を使用してアクティベーション コンテキストの作成を追跡しようとしましたが、アクティベーション コンテキストの作成のみがログに記録されました。
Application.EnableVisualStyles() をコメントアウトしようとしましたが、役に立ちませんでした。
アクティベーションコンテキストの作成と破棄でdllへの各呼び出しをラップすると機能しますが、当然そこに行きたくありません...