マネージド C# DLL (Managed.dll) から使用しようとしているアンマネージド C++/ATL インプロセス COM オブジェクト (Unmanaged.dll 内) があります。しかし、登録不要のCOMを使いたい。私はこれらのステップまでそれを持っています:
- COM オブジェクトを開発マシンに登録します。インプロセス サーバーには、適切に登録されたタイプ ライブラリが必要です。
- C# プロジェクト内の COM オブジェクトへの参照を追加し、参照プロパティを Isolated = True に設定します。
これにより、Unmanaged.dll、Managed.dll、および Native.Managed.manifest が生成されます。マニフェストを開くと、システムがマニフェストを使用して、登録不要の方法で COM オブジェクトをロードする方法が明らかです。
これがこすりです。Managed.dll を動的にロードしてパブリック タイプにアクセスするマネージ EXE (Managed.exe) があります。「動的に」とは、Assembly.LoadFrom("Managed.dll") を使用するということです。Managed.dll 内のコードが COM オブジェクトを作成しようとすると、「クラスが登録されていません」という例外が発生します。Managed.dll が読み込まれると、アクティベーション コンテキストが正しく設定されないようです。
このシナリオで登録不要の COM を動作させる方法はありますか?