combaseapi.h (REGCLS 列舉)
控制類別對象的連接類型。
Syntax
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) 應用程式。 指定此值不會影響物件應用程式呼叫 CoRevokeClassObject 的責任;當 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 使用 OleCreate 和 OleLoad 等函式來建立內嵌時,這個機制很有用,但同樣地,不想針對自我內嵌案例啟動本身的新實例。 此區別對於內嵌很重要,因為默認處理程式預設會匯總 Proxy 管理員,應用程式應該呼叫自我內嵌案例的 OleCreateEmbeddingHelper 來覆寫此默認行為。 如果您的應用程式不需要區分本機和程式案例,您就不需要使用 REGCLS_MULTI_SEPARATE 註冊您的類別處理站。 事實上,當應用程式將其 MULTIPLEUSE 類別處理站註冊為 MULTI_SEPARATE,且不會將另一個類別處理站註冊為 INPROC_SERVER 時,應用程式會產生額外的網路往返。 |
|
REGCLS_SUSPENDED 值: 4 暫停指定 CLSID 的註冊和啟用要求,直到呼叫 CoResumeClassObjects 為止。 這通常用來註冊可註冊多個類別對象的伺服器 CLSID,以減少整體註冊時間,因此伺服器應用程式啟動時間是透過對 SCM 進行單一呼叫,不論伺服器註冊多少 CLSID。 注意 此旗標可防止應用程式關閉和嘗試註冊 COM 類別的應用程式之間的可能競爭狀況發生 COM 啟用錯誤。 |
|
REGCLS_SURROGATE 值: 8 類別物件是用來執行 DLL 伺服器的代理處理序。 代理程式所註冊的類別處理站不是 DLL 伺服器實作的實際類別處理站,而是代理所實作的泛型類別處理站。 這個泛型類別處理站會將實例建立和封送處理委派給代理中執行之 DLL 伺服器的類別處理站。 如需 DLL 代理的詳細資訊,請參閱 DllSurrogate 登錄值。 |
|
REGCLS_AGILE 值: 0x10 類別物件會匯總自由線程封送處理器 和 將會讓所有proc Apartment 可見。 可以與其他旗標搭配使用。 例如,REGCLS_AGILE |
註冊的REGCLS_MULTIPLEUSE 類別物件,可從 中多次使用 不同的 Apartment。 如果沒有其他旗標,行為 只會保留REGCLS_SINGLEUSE語意 可以產生一個實例。 |
備註
在 CoRegisterClassObject 中, REGCLS 和 CLSCTX 列舉的成員會結合在一起,決定如何註冊類別物件。
執行 DLL 伺服器的 EXE 代理 () 呼叫 CoRegisterClassObject ,以使用新的 REGCLS 值註冊類別處理站,REGCLS_SURROGATE。
DLL Surrogates 的所有類別處理站都應該註冊REGCLS_SURROGATE集。 當您註冊 DLL 伺服器的 Surrogate 時,請勿設定REGCLS_SINGLUSE或REGCLS_MULTIPLEUSE。
下表摘要說明允許 的 REGCLS 值組合和受組合影響的物件註冊。
REGCLS_SINGLEUSE | REGCLS_MULTIPLEUSE | REGCLS_MULTI_SEPARATE | 其他 | |
---|---|---|---|---|
CLSCTX_INPROC_SERVER | 錯誤 | 內含式 | 內含式 | 錯誤 |
CLSCTX_LOCAL_SERVER | 本機 | 進程內/本機 | 本機 | 錯誤 |
以上皆是 | 錯誤 | 進程內/本機 | 進程內/本機 | 錯誤 |
其他 | 錯誤 | 錯誤 | 錯誤 | 錯誤 |
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | combaseapi.h (包含 Objbase.h) |