1) いいえ - COMオブジェクトを登録する必要はありません。新しいCOM オブジェクトを作成するには、登録が必要です。COM オブジェクトを必要とする多くのインターフェイス (COM またはネイティブ関数) があります。それらの API は、COM オブジェクトがどのインターフェイスをサポートする必要があるかを示します。既存の COM オブジェクトを渡すため、COM オブジェクトを作成するために登録情報は必要ありません。このシナリオのバリエーションは、作成された COM オブジェクトを登録できる実行中のオブジェクト テーブルです。これらのオブジェクトも自分で作成したものであり、登録情報は必要ありません。
インターフェースの例: IQueryCancelAutoplay。
2) COMオブジェクトがメモリ内に存在する。おそらく、COM ファクトリと共に DLL に実装された COMクラスについて考えているでしょう。COM クラスは GUID によって登録されます。DLL ごとに複数のクラス = GUID を持つことができますが、クラスごとに 1 つの DLL しかありません。呼び出し元は COM にクラスのインスタンスを要求することを思い出してください。同じクラスを実装する 2 つの DLL がある場合、COM はどの DLL をロードしますか?! もちろん、それぞれが 1 つのクラスを実装する 2 つの DLL が存在する可能性があり、2 つのクラスはいくつかのインターフェイスを共有します。それらは常に IUnknown を共有します。たとえば、多くの場合 IDispatch ですが、まれに IAcmeCorpFooBarv2
3) A COM DLL is a normal DLL which (a) exposes some COM-specific functions and (b) is registered so the COM framewrok can call LoadLibrary on it. The DLL may also expose other non-COM functions. As a result, you can call LoadLibrary on a COM DLL yourself. This can occasionally be useful to reduce the latency involved in creating your first COM object.