共用方式為


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 使用 OleCreateOleLoad 等函式來建立內嵌時,這個機制很有用,但同樣地,不想針對自我內嵌案例啟動本身的新實例。 此區別對於內嵌很重要,因為默認處理程式預設會匯總 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 中, REGCLSCLSCTX 列舉的成員會結合在一起,決定如何註冊類別物件。

執行 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)

另請參閱

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate