同じマシンでオブジェクトを作成するときのCoCreateInstance()とCoGetClassObject()の違いは何ですか?

StackOverflow https://stackoverflow.com/questions/824907

質問

CoCreateInstanceは、指定されたクラスIDのCOMサーバーを見つけ、そのIDのオブジェクトインスタンスを作成し、そのオブジェクトインスタンスからインターフェイスを取得することを理解しています。 CoGetClassObject()はクラスIDのCOMサーバーを見つけ、そのクラスIDのクラスファクトリのインスタンスを作成し、実際のオブジェクトの作成に使用できるクラスファクトリインターフェイスを取得します。

同じマシン上でオブジェクトを作成するために使用した場合、これらの機能は他にどのように異なりますか?同じように機能しますが、まったく同じCOMサーバーで異なるコードが呼び出されるだけですか?

役に立ちましたか?

解決

CoGetClassObjectは基本的に、特定のインターフェイスのファクトリへのポインタを返します。内部では、CoCreateInstanceはCoGetClassObjectを使用します。 CoGetClassObjectを呼び出す利点は、特定のオブジェクトの多くのインスタンスを作成する場合、クラスファクトリを1回作成するだけで済むことです。

CoGetClassObjectのMSDNセクションでは、この機能をどのように活用できるかについて簡単に説明しています。

他のヒント

JaredParが言ったことに加えて、CoGetClassObjectはクラスファクトリを返します(インプロセスサーバーの場合、DLLのDLLGetClassObjectエクスポート関数を呼び出します)。クラスファクトリは、コクラスをインスタンス化するために使用されます。 CoCreateInstanceは内部的にCoGetClassObjectを呼び出し、必要なクラスファクトリを取得し、それを使用して、要求したコクラスをインスタンス化します。 CoCreateInstanceを呼び出すとき、コクラスの作成を遅らせることはできません。コクラスの作成に費用がかかる場合があり、作成を遅らせたいが、クラスファクトリにアクセスできるため、必要に応じてコクラスをインスタンス化できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top