次の方法で共有


REGCLS 列挙 (combaseapi.h)

クラス オブジェクトへの接続の種類を制御します。

構文

typedef enum tagREGCLS {
  REGCLS_SINGLEUSE = 0,
  REGCLS_MULTIPLEUSE = 1,
  REGCLS_MULTI_SEPARATE = 2,
  REGCLS_SUSPENDED = 4,
  REGCLS_SURROGATE = 8,
  REGCLS_AGILE = 0x10
} REGCLS;

定数

 
REGCLS_SINGLEUSE
値: 0
アプリケーションが CoGetClassObject を使用してクラス オブジェクトに接続されると、他のアプリケーションが接続できないように、クラス オブジェクトがパブリック ビューから削除されます。 この値は、通常、シングル ドキュメント インターフェイス (SDI: Single Document Interface) アプリケーションに対して使用されます。 この値を指定しても、 CoRevokeClassObject を呼び出すオブジェクト アプリケーションの責任には影響しません。オブジェクト クラスが終了したら、 常に CoRevokeClassObject を呼び出す必要があります。
REGCLS_MULTIPLEUSE
値: 1
複数のアプリケーションは、 CoGetClassObject の呼び出しを介してクラス オブジェクトに接続できます。 CoRegisterClassObject の呼び出しでREGCLS_MULTIPLEUSEとCLSCTX_LOCAL_SERVERの両方が設定されている場合、CLSCTX_INPROC_SERVERが明示的に設定されているかどうかに関係なく、クラス オブジェクトもインプロセス サーバーとして自動的に登録されます。
REGCLS_MULTI_SEPARATE
値: 2
CoGetClassObject の呼び出しを通じて、個別のCLSCTX_LOCAL_SERVERとCLSCTX_INPROC_SERVERクラス ファクトリを登録する場合に便利です。 REGCLS_MULTI_SEPARATEが設定されている場合は、各実行コンテキストを個別に設定する必要があります。 CoRegisterClassObject は、アウトプロセス サーバー (CLSCTX_LOCAL_SERVERが設定されている) をインプロセス サーバーとして自動的に登録しません。 これにより、EXE は、CLSCTX_LOCAL_SERVER登録を妨げることなく、自己埋め込みなどのインプロセス のニーズに合わせてオブジェクトの複数のインスタンスを作成できます。 EXE で REGCLS_MULTI_SEPARATE クラス ファクトリと CLSCTX_INPROC_SERVER クラス ファクトリが登録されている場合、EXE によって実行される CLSCTX パラメーターでCLSCTX_INPROC_SERVERを指定するインスタンス作成呼び出しは、SCM に近づかずにローカルで満たされます。 このメカニズムは、EXE が OleCreateOleLoad などの関数を使用して埋め込みを作成する場合に便利ですが、同時に、自己埋め込みケースに対してそれ自体の新しいインスタンスを起動する必要はありません。 既定のハンドラーは既定でプロキシ マネージャーを集計し、アプリケーションは自己埋め込みケースに 対して OleCreateEmbeddingHelper を呼び出すことによってこの既定の動作をオーバーライドする必要があるため、埋め込みでは区別が重要です。

アプリケーションでローカルとインプロックのケースを区別する必要がない場合は、REGCLS_MULTI_SEPARATEを使用してクラス ファクトリを登録する必要はありません。 実際、アプリケーションでは、MULTIPLEUSE クラス ファクトリを MULTI_SEPARATE として登録し、別のクラス ファクトリを INPROC_SERVER として登録しない場合、SCM への追加のネットワーク ラウンド トリップが発生します。
REGCLS_SUSPENDED
値: 4
CoResumeClassObjects の呼び出しが行われるまで、指定した CLSID の登録要求とアクティブ化要求を中断します。 これは通常、複数のクラス オブジェクトを登録できるサーバーの CLSID を登録するために使用され、サーバーに登録されている CLSID の数に関係なく、SCM を 1 回呼び出すことで、全体的な登録時間を短縮し、サーバー アプリケーションの起動時間を短縮します。

メモ このフラグは、アプリケーションのシャットダウンと COM クラスの登録を試みるアプリケーションとの間で発生する可能性のある競合状態からの COM アクティブ化エラーを防ぎます。

 
REGCLS_SURROGATE
値: 8
クラス オブジェクトは、DLL サーバーの実行に使用されるサロゲート プロセスです。 サロゲート プロセスによって登録されたクラス ファクトリは、DLL サーバーによって実装される実際のクラス ファクトリではなく、サロゲートによって実装されるジェネリック クラス ファクトリです。 このジェネリック クラス ファクトリは、サロゲートで実行されている DLL サーバーのクラス ファクトリにインスタンスの作成とマーシャリングを委任します。 DLL サロゲートの詳細については、 DllSurrogate レジストリ値に関するページを参照してください。
REGCLS_AGILE
値: 0x10
クラス オブジェクトは、フリースレッド マーシャラーを集計します
そして、すべてのインプロクアパートに見えるようにされます。 他のフラグと共に使用できます。 たとえば、REGCLS_AGILE
を登録するREGCLS_MULTIPLEUSE
から複数回使用できるクラス オブジェクト
異なるアパートメント。 他のフラグがない場合、動作
では、REGCLS_SINGLEUSEセマンティクスのみが保持されます
1 つのインスタンスを生成できます。

注釈

CoRegisterClassObject では、REGCLS 列挙体と CLSCTX 列挙体の両方のメンバーがまとめられ、クラス オブジェクトの登録方法が決定されます。

EXE サロゲート (DLL サーバーが実行されている) は CoRegisterClassObject を呼び出して、新しい REGCLS 値 REGCLS_SURROGATEを使用してクラス ファクトリを登録します。

DLL サロゲートのすべてのクラス ファクトリは、REGCLS_SURROGATE セットに登録する必要があります。 DLL サーバーのサロゲートを登録するときに、REGCLS_SINGLUSEまたはREGCLS_MULTIPLEUSEを設定しないでください。

次の表は、許容される REGCLS 値の組み合わせと、その組み合わせの影響を受けるオブジェクトの登録をまとめたものです。

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE その他
CLSCTX_INPROC_SERVER エラー インプロセス インプロセス エラー
CLSCTX_LOCAL_SERVER ローカル インプロセス/ローカル ローカル エラー
上記の両方 エラー インプロセス/ローカル インプロセス/ローカル エラー
その他 エラー エラー エラー エラー

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header combaseapi.h (Objbase.h を含む)

こちらもご覧ください

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate