8

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

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

4

2 に答える 2

1

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

于 2009-12-09T11:02:46.923 に答える