共用方式為


CoRegisterClassObject 函式 (combaseapi.h)

向 OLE 註冊 EXE 類別物件,讓其他應用程式可以與其連線。

語法

HRESULT CoRegisterClassObject(
  [in]  REFCLSID  rclsid,
  [in]  LPUNKNOWN pUnk,
  [in]  DWORD     dwClsContext,
  [in]  DWORD     flags,
  [out] LPDWORD   lpdwRegister
);

參數

[in] rclsid

要註冊的 CLSID。

[in] pUnk

在發行可用性的類別物件上, IUnknown 介面的指標。

[in] dwClsContext

執行可執行程式代碼的內容。 如需這些內容值的相關信息,請參閱 CLSCTX 列舉。

[in] flags

指出如何建立與類別對象的連接。 如需這些旗標的相關信息,請參閱 REGCLS 列舉。

[out] lpdwRegister

識別已註冊之類別物件的值指標;稍後由 CoRevokeClassObject 函式用來撤銷註冊。

傳回值

此函式可以傳回標準傳回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
已成功註冊類別物件。

備註

EXE 物件應用程式應該在啟動時呼叫 CoRegisterClassObject 。 它也可以用來註冊內部物件,以便由相同的 EXE 或其他程式代碼 (使用,例如 EXE 所使用的 DLL) 。 只有 EXE 物件應用程式會呼叫 CoRegisterClassObject。 對象處理程式或 DLL 物件應用程式不會呼叫此函式,而是必須實作並匯出 DllGetClassObject 函式。

啟動時,多用途 EXE 物件應用程式必須建立類別物件 (搭配其上的 IClassFactory 介面) ,並呼叫 CoRegisterClassObject 來註冊類別物件。 支持數個不同類別的物件應用程式 (,例如多個類型的可內嵌物件,) 必須為每個物件配置並註冊不同的類別物件。

相同類別物件的多個註冊是獨立的,而且不會產生錯誤。 每個後續註冊都會在 lpdwRegister 中產生唯一密鑰。

多個檔介面 (MDI) 應用程式必須註冊其類別物件。 單一檔介面 (SDI) 應用程式只有在可以透過 /Embedding 參數啟動時,才必須註冊其類別物件。

類別物件的伺服器應該呼叫 CoRevokeClassObject ,以撤銷類別物件, (移除其註冊) 當下列所有專案都成立時:

  • 物件定義沒有現有的實例。
  • 類別對象上沒有鎖定。
  • 為類別物件提供服務的應用程式不在使用者控制下, (顯示) 使用者看不到。
撤銷類別物件之後,當其參考計數達到零時,就可以釋放類別物件,讓應用程式結束。 請注意, CoRegisterClassObject 會呼叫 IUnknown::AddRefCoRevokeClassObject 呼叫 IUnknown::Release,因此這兩個函式會形成 AddRef/Release 配對。

從 Windows Server 2003 起,如果 COM 物件應用程式註冊為服務,COM 會驗證註冊。 COM 可確保服務的進程標識碼,在服務控制管理員 (SCM) 中,符合註冊進程的進程標識符。 如果沒有,COM 會失敗註冊。 如果 COM 物件應用程式在沒有登錄機碼的系統帳戶中執行,COM 會將物件應用程式身分識別視為 啟動使用者

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

CLSCTX

CoGetClassObject

CoRevokeClassObject

DllGetClassObject

REGCLS