0

私は現在、数年前にアウトソーシングしたソフトウェアを保守していますが、それは十分に文書化されていません。この部分は、サードパーティのアプリケーションで使用するためのCOMサーバーであり、必要なすべての展開を行うインストーラーです。

32ビットDLLとしてコンパイルされ、32ビットアプリケーションから使用することを目的としたコアがあります。また、64ビットDLLとしてコンパイルされ、64ビットアプリケーションからの使用を目的としたシムもあります。シムはCoCreateInstance()を呼び出してコアをインスタンス化し、呼び出しをコアにリダイレクトします。コアは、他の32ビットライブラリの膨大なセットに依存しています。

32ビットコアは、通常のin-procサーバーとまったく同じように登録されます。HKCR\ CLSIDの下に、コアクラスIDとInprocServer32の下のライブラリへのパスを含むエントリがあります。64ビットシムも同じ方法で登録され、64ビットシムにアプリケーションIDが導入されます。これはHKCR \ CLSIDの下に追加され、DCOMにも登録されます。DCOMコンソールにそのアプリケーションIDのエントリがあります。

現在、DCOM登録は奇妙に見えます。シムがコアではなくDCOMに登録されるのはなぜですか?32ビットコアをDCOMに登録して、別のプロセスでインスタンス化し、64ビットコンシューマーから保護する必要があると思います。しかし、どうやらそれは現在行われているように動作します。32ビットコアではなく64ビットシムをDCOMに登録する意味は何ですか?

4

1 に答える 1

1

32 ビットと 64 ビットの DLL とプロセスを組み合わせて使用​​できることを思い出してください。この場合の 32 ビット コアは、ホストの 32 ビット プロセスに直接ロードできるため、DCOM を使用しません。64 ビット shim には DCOM が必要です。これは、その開発者が COM の機能を利用して、同じマシン上であっても別のプロセスでコアをホストしているためです。32 ビット コアは 64 ビット ホストにロードできないため、これが必要です。DCOM を使用すると、コアとの間のすべての呼び出しがマーシャリングされ、別の 32 ビット プロセスに置かれます。コアへの呼び出しは DCOM を経由しないため、これは最適な配置です。開発者は、コアが 64 ビット アプリケーションから呼び出すのに十分なほど十分に機能することが証明されるまで、DCOM を邪魔することなく、テスト、32 ビット プロセスでのデバッグでこれを利用した可能性が非常に高いです。

于 2009-11-10T01:28:17.527 に答える