REGCLS
列挙型フラグメンバー 6
| 名前 | 10進 | 16進 | 説明 |
|---|---|---|---|
| REGCLS_SINGLEUSE | 0 | 0x0 | アプリケーションが CoGetClassObject によってクラスオブジェクトに接続した後、そのクラスオブジェクトは公開状態から取り除かれ、他のアプリケーションは接続できなくなります。この値は通常、シングルドキュメントインターフェイス (SDI) アプリケーションで使用されます。この値を指定しても、オブジェクトアプリケーションが CoRevokeClassObject を呼び出す責任には影響しません。オブジェクトクラスの使用を終えたときは、必ず CoRevokeClassObject を呼び出さなければなりません。 |
| REGCLS_MULTIPLEUSE | 1 | 0x1 | 複数のアプリケーションが CoGetClassObject の呼び出しを通じてクラスオブジェクトに接続できます。CoRegisterClassObject の呼び出しで REGCLS_MULTIPLEUSE と CLSCTX_LOCAL_SERVER の両方が設定されている場合、CLSCTX_INPROC_SERVER が明示的に設定されているかどうかにかかわらず、そのクラスオブジェクトはインプロセスサーバーとしても自動的に登録されます。 |
| REGCLS_MULTI_SEPARATE | 2 | 0x2 | 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 が OleCreate や OleLoad などの関数を使用して埋め込みを作成する一方で、自己埋め込みの場合に自分自身の新しいインスタンスを起動したくないときに役立ちます。この区別は埋め込みにおいて重要です。既定のハンドラーは既定でプロキシマネージャーをアグリゲートするため、自己埋め込みの場合、アプリケーションは OleCreateEmbeddingHelper を呼び出してこの既定の動作をオーバーライドする必要があります。 アプリケーションがローカルとインプロセスの場合を区別する必要がなければ、REGCLS_MULTI_SEPARATE を使用してクラスファクトリーを登録する必要はありません。実際、MULTIPLEUSE のクラスファクトリーを MULTI_SEPARATE として登録し、別のクラスファクトリーを INPROC_SERVER として登録しない場合、アプリケーションには SCM への余分なネットワークラウンドトリップが発生します。 |
| REGCLS_SUSPENDED | 4 | 0x4 | CoResumeClassObjects が呼び出されるまで、指定した CLSID に対する登録とアクティブ化の要求を保留します。これは通常、複数のクラスオブジェクトを登録できるサーバーの CLSID を登録するために使用します。サーバーに登録される CLSID の数にかかわらず SCM への呼び出しを 1 回にまとめることで、登録全体の時間、ひいてはサーバーアプリケーションの起動時間を短縮できます。 注 このフラグは、アプリケーションのシャットダウンと、そのアプリケーションによる COM クラスの登録との間で発生しうる競合状態に起因する COM のアクティブ化エラーを防ぎます。
|
| REGCLS_SURROGATE | 8 | 0x8 | クラスオブジェクトは、DLL サーバーを実行するために使用されるサロゲートプロセスです。サロゲートプロセスによって登録されるクラスファクトリーは、DLL サーバーが実装する実際のクラスファクトリーではなく、サロゲートが実装する汎用のクラスファクトリーです。この汎用クラスファクトリーは、インスタンスの作成とマーシャリングを、サロゲート内で実行されている DLL サーバーのクラスファクトリーに委譲します。DLL サロゲートの詳細については、DllSurrogate レジストリ値を参照してください。 |
| REGCLS_AGILE | 16 | 0x10 | クラスオブジェクトはフリースレッドマーシャラーをアグリゲートし、すべてのインプロセスアパートメントから参照できるようになります。他のフラグと組み合わせて使用できます。たとえば REGCLS_AGILE | REGCLS_MULTIPLEUSE を指定すると、異なるアパートメントから複数回使用できるクラスオブジェクトを登録できます。他のフラグを指定しない場合、生成できるインスタンスが 1 つだけという REGCLS_SINGLEUSE と同じ動作になります。 |
公式ドキュメント
クラスオブジェクトへの接続の種類を制御します。
解説(Remarks)
CoRegisterClassObject では、REGCLS 列挙型と CLSCTX 列挙型の両方のメンバーを組み合わせることで、クラスオブジェクトの登録方法が決まります。
(DLL サーバーを実行する) EXE サロゲートは、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 | ローカル | インプロセス/ローカル | ローカル | エラー |
| 上記の両方 | エラー | インプロセス/ローカル | インプロセス/ローカル | エラー |
| その他 | エラー | エラー | エラー | エラー |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
列挙メンバーの定義。HSP タブは #define global(値は16進)。
typedef enum REGCLS : int {
REGCLS_SINGLEUSE = 0,
REGCLS_MULTIPLEUSE = 1,
REGCLS_MULTI_SEPARATE = 2,
REGCLS_SUSPENDED = 4,
REGCLS_SURROGATE = 8,
REGCLS_AGILE = 16
} REGCLS;[Flags]
public enum REGCLS : int
{
REGCLS_SINGLEUSE = 0,
REGCLS_MULTIPLEUSE = 1,
REGCLS_MULTI_SEPARATE = 2,
REGCLS_SUSPENDED = 4,
REGCLS_SURROGATE = 8,
REGCLS_AGILE = 16,
}<Flags>
Public Enum REGCLS As Integer
REGCLS_SINGLEUSE = 0
REGCLS_MULTIPLEUSE = 1
REGCLS_MULTI_SEPARATE = 2
REGCLS_SUSPENDED = 4
REGCLS_SURROGATE = 8
REGCLS_AGILE = 16
End Enumimport enum
class REGCLS(enum.IntFlag):
REGCLS_SINGLEUSE = 0
REGCLS_MULTIPLEUSE = 1
REGCLS_MULTI_SEPARATE = 2
REGCLS_SUSPENDED = 4
REGCLS_SURROGATE = 8
REGCLS_AGILE = 16// REGCLS (flags)
pub const REGCLS_SINGLEUSE: i32 = 0;
pub const REGCLS_MULTIPLEUSE: i32 = 1;
pub const REGCLS_MULTI_SEPARATE: i32 = 2;
pub const REGCLS_SUSPENDED: i32 = 4;
pub const REGCLS_SURROGATE: i32 = 8;
pub const REGCLS_AGILE: i32 = 16;// REGCLS
const (
REGCLS_SINGLEUSE int32 = 0
REGCLS_MULTIPLEUSE int32 = 1
REGCLS_MULTI_SEPARATE int32 = 2
REGCLS_SUSPENDED int32 = 4
REGCLS_SURROGATE int32 = 8
REGCLS_AGILE int32 = 16
)const
REGCLS_SINGLEUSE = 0;
REGCLS_MULTIPLEUSE = 1;
REGCLS_MULTI_SEPARATE = 2;
REGCLS_SUSPENDED = 4;
REGCLS_SURROGATE = 8;
REGCLS_AGILE = 16;// REGCLS
pub const REGCLS_SINGLEUSE: i32 = 0;
pub const REGCLS_MULTIPLEUSE: i32 = 1;
pub const REGCLS_MULTI_SEPARATE: i32 = 2;
pub const REGCLS_SUSPENDED: i32 = 4;
pub const REGCLS_SURROGATE: i32 = 8;
pub const REGCLS_AGILE: i32 = 16;const
REGCLS_SINGLEUSE* = 0
REGCLS_MULTIPLEUSE* = 1
REGCLS_MULTI_SEPARATE* = 2
REGCLS_SUSPENDED* = 4
REGCLS_SURROGATE* = 8
REGCLS_AGILE* = 16enum REGCLS : int {
REGCLS_SINGLEUSE = 0,
REGCLS_MULTIPLEUSE = 1,
REGCLS_MULTI_SEPARATE = 2,
REGCLS_SUSPENDED = 4,
REGCLS_SURROGATE = 8,
REGCLS_AGILE = 16,
}#define global REGCLS_SINGLEUSE 0x0
#define global REGCLS_MULTIPLEUSE 0x1
#define global REGCLS_MULTI_SEPARATE 0x2
#define global REGCLS_SUSPENDED 0x4
#define global REGCLS_SURROGATE 0x8
#define global REGCLS_AGILE 0x10
; ※フラグ列挙型。ビットORで組み合わせ可(例: FOO|BAR)。