共用方式為


CComModule 類別

自 ATL 7.0 起,已被取代:如需詳細資訊, CComModule 請參閱 ATL 模組類別

重要

這個類別及其成員不能用於在Windows 執行階段中執行的應用程式。

語法

class CComModule : public _ATL_MODULE

成員

公用方法

名稱 描述
CComModule::GetClassObject 建立指定 CLSID 的物件。 僅限 DLL。
CComModule::GetModuleInstance 傳回 m_hInst
CComModule::GetResourceInstance 傳回 m_hInstResource
CComModule::GetTypeLibInstance 傳回 m_hInstTypeLib
CComModule::Init 初始化資料成員。
CComModule::RegisterClassHelper 在系統登錄中輸入物件的標準類別註冊。
CComModule::RegisterClassObjects 註冊類別物件。 僅適用于 EXE。
CComModule::RegisterServer 更新物件對應中每個物件的系統登錄。
CComModule::RegisterTypeLib 註冊類型程式庫。
CComModule::RevokeClassObjects 撤銷類別物件。 僅適用于 EXE。
CComModule::Term 釋放資料成員。
CComModule::UnregisterClassHelper 從系統登錄中移除物件的標準類別註冊。
CComModule::UnregisterServer 取消註冊物件對應中的每個物件。
CComModule::UpdateRegistryClass 註冊或取消註冊物件的標準類別註冊。
CComModule::UpdateRegistryFromResourceD 執行指定資源中包含的腳本,以註冊或取消註冊物件。
CComModule::UpdateRegistryFromResourceS 以靜態方式連結至 ATL 登錄元件。 執行指定資源中包含的腳本,以註冊或取消註冊物件。

公用資料成員

名稱 描述
CComModule::m_csObjMap 確保已同步存取物件對應資訊。
CComModule::m_csTypeInfoHolder 確保同步存取型別程式庫資訊。
CComModule::m_csWindowCreate 確保同步存取視窗類別資訊和視窗建立期間所使用的靜態資料。
CComModule::m_hInst 包含模組實例的控制碼。
CComModule::m_hInstResource 根據預設,包含模組實例的控制碼。
CComModule::m_hInstTypeLib 根據預設,包含模組實例的控制碼。
CComModule::m_pObjMap 指向模組實例所維護的物件對應。

備註

注意

此類別已被取代,而 ATL 程式碼產生精靈現在會使用 CAtlAutoThreadModule 和 CAtlModule 衍生類別。 如需詳細資訊, 請參閱 ATL 模組類別。 下列資訊適用于搭配舊版 ATL 所建立的應用程式使用。 CComModule 仍然是 ATL 的一部分,用於回溯功能。

CComModule 會實作 COM 伺服器模組,允許用戶端存取模組的元件。 CComModule 同時支援 DLL (進程內) 和 EXE (local) 模組。

CComModule實例會使用物件對應來維護一組類別物件定義。 此物件對應會實作為結構的陣列 _ATL_OBJMAP_ENTRY ,並包含下列資訊:

  • 在系統登錄中輸入和移除物件描述。

  • 透過類別處理站具現化物件。

  • 建立用戶端與元件中根物件之間的通訊。

  • 執行類別物件的存留期管理。

當您執行 ATL COM AppWizard 時,精靈會自動產生 _Module 、全域實例 CComModule 或衍生自它的類別。 如需 ATL 專案精靈的詳細資訊,請參閱建立 ATL 專案 一文

除了 CComModule ,ATL 還提供 CComAutoThreadModule ,其會實作 EXE 和 Windows 服務的 Apartment 模型模組。 當您想要在多個 Apartment 中建立物件時,請從 CComAutoThreadModule 衍生模組。

繼承階層架構

_ATL_MODULE

CAtlModule

CAtlModuleT

CComModule

需求

標頭: atlbase.h

CComModule::GetClassObject

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT GetClassObject(
    REFCLSID rclsid,
    REFIID riid,
    LPVOID* ppv) throw();

參數

rclsid
[in]要建立之物件的 CLSID。

riid
[in]所要求介面的 IID。

Ppv
[out]riid 識別之介面指標的指標。 如果物件不支援這個介面, ppv 會設定為 Null。

傳回值

標準 HRESULT 值。

備註

建立指定 CLSID 的物件,並擷取這個物件的介面指標。

GetClassObject 僅適用于 DLL。

CComModule::GetModuleInstance

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE GetModuleInstance() throw();

傳回值

識別此課程模組的 HINSTANCE。

備註

回m_hInst 資料成員。

CComModule::GetResourceInstance

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE GetResourceInstance() throw();

傳回值

HINSTANCE。

備註

回m_hInstResource 資料成員。

CComModule::GetTypeLibInstance

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE GetTypeLibInstance() const throw();

傳回值

HINSTANCE。

備註

回m_hInstTypeLib 資料成員。

CComModule::Init

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT Init(
    _ATL_OBJMAP_ENTRY* p,
    HINSTANCE h,
    const GUID* plibid = NULL) throw();

參數

p
[in]物件對應專案陣列的指標。

小時
[in]HINSTANCE 傳遞至 DLLMainWinMain

plibid
[in]與專案相關聯之類型程式庫之 LIBID 的指標。

傳回值

標準 HRESULT 值。

備註

初始化所有資料成員。

CComModule::m_csObjMap

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

CRITICAL_SECTION m_csObjMap;

備註

確保已同步存取物件對應。

CComModule::m_csTypeInfoHolder

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

CRITICAL_SECTION m_csTypeInfoHolder;

備註

確保同步存取型別程式庫。

CComModule::m_csWindowCreate

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

CRITICAL_SECTION m_csWindowCreate;

備註

確保已同步存取視窗類別資訊,以及視窗建立期間所使用的靜態資料。

CComModule::m_hInst

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE m_hInst;

備註

包含模組實例的控制碼。

Init 方法會將 設定 m_hInst 為傳遞至 DLLMainWinMain 的控制碼。

CComModule::m_hInstResource

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE m_hInstResource;

備註

根據預設,包含模組實例的控制碼。

Init 方法會將 設定 m_hInstResource 為傳遞至 DLLMainWinMain 的控制碼。 您可以明確地將 設定 m_hInstResource 為資源的控制碼。

GetResourceInstance 方法會傳回儲存在 中的 m_hInstResource 控制碼。

CComModule::m_hInstTypeLib

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HINSTANCE m_hInstTypeLib;

備註

根據預設,包含模組實例的控制碼。

Init 方法會將 設定 m_hInstTypeLib 為傳遞至 DLLMainWinMain 的控制碼。 您可以明確地將 設定 m_hInstTypeLib 為類型程式庫的控制碼。

GetTypeLibInstance 方法會傳回儲存在 中的 m_hInstTypeLib 控制碼。

CComModule::m_pObjMap

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

_ATL_OBJMAP_ENTRY* m_pObjMap;

備註

指向模組實例所維護的物件對應。

CComModule::RegisterClassHelper

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

ATL_DEPRECATED HRESULT RegisterClassHelper(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    UINT nDescID,
    DWORD dwFlags);

參數

Clsid
[in]要註冊之物件的 CLSID。

lpszProgID
[in]與 物件相關聯的 ProgID。

lpszVerIndProgID
[in]與 物件相關聯的版本獨立 ProgID。

nDescID
[in]物件描述之字串資源的識別碼。

dwFlags
[in]指定要在登錄中輸入的執行緒模型。 可能的值為 THREADFLAGS_APARTMENT、THREADFLAGS_BOTH 或 AUTPRXFLAG。

傳回值

標準 HRESULT 值。

備註

在系統登錄中輸入物件的標準類別註冊。

UpdateRegistryClass 方法會呼叫 RegisterClassHelper

CComModule::RegisterClassObjects

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT RegisterClassObjects(DWORD dwClsContext, DWORD dwFlags) throw();

參數

dwClsCoNtext
[in]指定要執行類別物件的內容。 可能的值為CLSCTX_INPROC_SERVER、CLSCTX_INPROC_HANDLER或CLSCTX_LOCAL_SERVER。 如需這些值的描述,請參閱 Windows SDK 中的 CLSCTX

dwFlags
[in]決定類別物件的連線類型。 可能的值為REGCLS_SINGLEUSE、REGCLS_MULTIPLEUSE或REGCLS_MULTI_SEPARATE。 如需這些值的描述,請參閱 Windows SDK 中的 REGCLS

傳回值

標準 HRESULT 值。

備註

向 OLE 註冊 EXE 類別物件,讓其他應用程式可以連線到它。 這個方法僅適用于 EXE。

CComModule::RegisterServer

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT RegisterServer(
    BOOL bRegTypeLib = FALSE,
    const CLSID* pCLSID = NULL) throw();

參數

bRegTypeLib
[in]指出是否要註冊型別程式庫。 預設值為 FALSE。

pCLSID
[in]指向要註冊之物件的 CLSID。 如果為 Null(預設值),則會註冊物件對應中的所有物件。

傳回值

標準 HRESULT 值。

備註

根據 pCLSID 參數,更新單一類別物件的系統登錄,或針對物件對應中的所有物件更新系統登錄。

如果 bRegTypeLib 為 TRUE,也會更新型別程式庫資訊。

如需如何將專案新增至物件對應的詳細資訊,請參閱 OBJECT_ENTRY_AUTO

RegisterServer 將會針對 DLL 或 DLLRegisterServerWinMain EXE 使用 /RegServer 命令列選項自動呼叫 。

CComModule::RegisterTypeLib

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT RegisterTypeLib() throw();
HRESULT RegisterTypeLib(LPCTSTR lpszIndex) throw();

參數

lpszIndex
[in]格式 "\\N" 為 的字串,其中 N 是 TYPELIB 資源的整數索引。

傳回值

標準 HRESULT 值。

備註

將類型程式庫的相關資訊新增至系統登錄。

如果模組實例包含多個類型程式庫,請使用這個方法的第二個版本來指定應該使用哪一個型別程式庫。

CComModule::RevokeClassObjects

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT RevokeClassObjects() throw();

傳回值

標準 HRESULT 值。

備註

移除類別物件。 這個方法僅適用于 EXE。

CComModule::Term

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

void Term() throw();

備註

釋放所有資料成員。

CComModule::UnregisterClassHelper

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

ATL_DEPRECATED HRESULT UnregisterClassHelper(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID);

參數

Clsid
[in]要取消註冊之物件的 CLSID。

lpszProgID
[in]與 物件相關聯的 ProgID。

lpszVerIndProgID
[in]與 物件相關聯的版本獨立 ProgID。

傳回值

標準 HRESULT 值。

備註

從系統登錄中移除物件的標準類別註冊。

UpdateRegistryClass 方法會呼叫 UnregisterClassHelper

CComModule::UnregisterServer

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

HRESULT UnregisterServer(const CLSID* pCLSID = NULL) throw ();
inline HRESULT UnregisterServer(BOOL bUnRegTypeLib, const CLSID* pCLSID = NULL) throw ();

參數

bUnRegTypeLib
如果為 TRUE,則類型程式庫也會取消註冊。

pCLSID
指向要取消註冊之物件的 CLSID。 如果為 Null(預設值),則會取消註冊物件對應中的所有物件。

傳回值

標準 HRESULT 值。

備註

根據 pCLSID 參數,取消註冊單一類別物件或物件對應中的所有物件。

UnregisterServer 將會針對 DLL 或 DLLUnregisterServerWinMain EXE 使用 /UnregServer 命令列選項自動呼叫 。

如需如何將專案新增至物件對應的詳細資訊,請參閱 OBJECT_ENTRY_AUTO

CComModule::UpdateRegistryClass

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

ATL_DEPRECATED HRESULT UpdateRegistryClass(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    UINT nDescID,
    DWORD dwFlags,
    BOOL bRegister);

ATL_DEPRECATED HRESULT UpdateRegistryClass(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    LPCTSTR szDesc,
    DWORD dwFlags,
    BOOL bRegister);

參數

Clsid
要註冊或取消註冊之物件的 CLSID。

lpszProgID
與 物件相關聯的 ProgID。

lpszVerIndProgID
與 物件相關聯的版本獨立 ProgID。

nDescID
物件描述之字串資源的識別碼。

szDesc
包含物件描述的字串。

dwFlags
指定要在登錄中輸入的執行緒模型。 可能的值為 THREADFLAGS_APARTMENT、THREADFLAGS_BOTH 或 AUTPRXFLAG。

bRegister
指出是否應該註冊物件。

傳回值

標準 HRESULT 值。

備註

如果 bRegister 為 TRUE,這個方法會在系統登錄中輸入物件的標準類別註冊。

如果 bRegister 為 FALSE,它會移除物件的註冊。

根據 bRegister 的值 UpdateRegistryClass 呼叫 RegisterClassHelper UnregisterClassHelper

藉由指定 DECLARE_REGISTRY 宏, UpdateRegistryClass 會在處理物件對應時自動叫用。

CComModule::UpdateRegistryFromResourceD

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

virtual HRESULT UpdateRegistryFromResourceD(
    LPCTSTR lpszRes,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

virtual HRESULT UpdateRegistryFromResourceD(
    UINT nResID,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw ();

參數

lpszRes
[in]資源名稱。

nResID
[in]資源識別碼。

bRegister
[in]指出是否應該註冊物件。

pMapEntries
[in]取代對應指標,儲存與腳本可取代參數相關聯的值。 ATL 會自動使用 %MODULE% 。 若要使用其他可取代的參數,請參閱以取得詳細資料。 否則,請使用 Null 預設值。

傳回值

標準 HRESULT 值。

備註

執行 lpszRes 或 nResID 指定資源中包含的腳本。

如果 bRegister 為 TRUE,這個方法會在系統登錄中註冊物件,否則會取消註冊物件。

藉由指定 DECLARE_REGISTRY_RESOURCE DECLARE_REGISTRY_RESOURCEID 宏, UpdateRegistryFromResourceD 會在處理物件對應時自動叫用。

注意

若要在執行時間取代取代值,請勿指定DECLARE_REGISTRY_RESOURCE或DECLARE_REGISTRY_RESOURCEID宏。 相反地,請建立結構的陣列 _ATL_REGMAP_ENTRIES ,其中每個專案都包含一個變數預留位置,其與值配對,以在執行時間取代預留位置。 然後呼叫 UpdateRegistryFromResourceD ,傳遞 pMapEntries 參數的 陣列。 這會將結構中的所有 _ATL_REGMAP_ENTRIES 取代值新增至註冊機構的取代對應。

注意

若要以靜態方式連結至 ATL 登錄元件(登錄器),請參閱 UpdateRegistryFromResourceS

如需可取代參數和腳本的詳細資訊,請參閱 ATL 登錄元件(登錄器) 一文

CComModule::UpdateRegistryFromResourceS

自 ATL 7.0 起,已經過時:如需詳細資訊, CComModule 請參閱 ATL 模組類別

virtual HRESULT UpdateRegistryFromResourceS(
    LPCTSTR lpszRes,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

virtual HRESULT UpdateRegistryFromResourceS(
    UINT nResID,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

參數

lpszRes
[in]資源名稱。

nResID
[in]資源識別碼。

bRegister
[in]指出是否應該註冊資源腳本。

pMapEntries
[in]取代對應指標,儲存與腳本可取代參數相關聯的值。 ATL 會自動使用 %MODULE% 。 若要使用其他可取代的參數,請參閱以取得詳細資料。 否則,請使用 Null 預設值。

傳回值

標準 HRESULT 值。

備註

類似于 UpdateRegistryFromResourceD ,但會 UpdateRegistryFromResourceS 建立 ATL 登錄元件(登錄器)的靜態連結。

UpdateRegistryFromResourceS會在處理物件對應時自動叫用,前提是您在 Visual Studio 2017 和更早版本中新增 #define _ATL_STATIC_REGISTRY 至 pch.h ( stdafx.h )。

注意

若要在執行時間取代取代值,請勿指定 DECLARE_REGISTRY_RESOURCE DECLARE_REGISTRY_RESOURCEID 宏。 相反地,請建立結構的陣列 _ATL_REGMAP_ENTRIES ,其中每個專案都包含一個變數預留位置,其與值配對,以在執行時間取代預留位置。 然後呼叫 UpdateRegistryFromResourceS ,傳遞 pMapEntries 參數的 陣列。 這會將結構中的所有 _ATL_REGMAP_ENTRIES 取代值新增至註冊機構的取代對應。

如需可取代參數和腳本的詳細資訊,請參閱 ATL 登錄元件(登錄器) 一文

另請參閱

類別概觀