COM サーバー (ATL で実装された COM クラス) を持つ exe を含むコードを実行しています。すべてのインターフェイスが定義された .idl ファイルがあります。COMサーバーの登録後、レジストリエントリを調べたところ、次のことがわかりました。各インターフェイスには、IID と ProxyStubClsid32 を持つエントリがあります。私が言及したCOMサーバーによって実装される1つのインターフェイスがあり、キーフィールドにIID = ProxyStubClsid32の値があり、他のすべてのインターフェイスインターフェイスエントリのProxyStubClsid32フィールドに同じIIDエントリがあります。なぜこれがそうですか??
次に、このインターフェイスを実装する新しいインターフェイスと新しい COM コンポーネントを exe に追加して登録しようとすると、レジストリで観察できることは、この新しいインターフェイスの IID エントリとその ProxyStubClsid32 が同じであることがわかりました。また、新しく追加された IID は、他のすべてのインターフェイスの ProxyStubClsid32 に存在します。
ProxyStubClsid32 には何が入りますか? これはどのように決定されますか?
新しいインターフェイスを追加した後でも、以前の IID が ProxyStubClsid32 に存在するようにします。これどうやってするの ??
また、コンポーネントをロードするシェル拡張機能を実装しているため、explorer.exe はこのレジストリ エントリをキャッシュしますか。古いエントリを参照していると思われるため、その exe で新しいインターフェイスを照会しても機能しません。explorer.exe を再起動すると、すべて正常に動作します。
誰でもこれについてコメントできますか。
これに対する答えには、私の問題に対するいくつかのヒントがあるようです:アウトプロセス COM サーバーのレジストリ キー
前もって感謝します。