分享方式:


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 或 DLLRegisterServer WinMain 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 或 DLLUnregisterServer WinMain 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呼叫 RegisterClassHelperUnregisterClassHelper

藉由指定 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_RESOURCEDECLARE_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_RESOURCEDECLARE_REGISTRY_RESOURCEID 巨集。 相反地,請建立結構的陣列 _ATL_REGMAP_ENTRIES ,其中每個專案都包含一個變數佔位元元,其與值配對,以在運行時間取代佔位元。 然後呼叫 UpdateRegistryFromResourceS,傳遞 pMapEntries 參數的陣列。 這會將結構中的所有 _ATL_REGMAP_ENTRIES 取代值新增至註冊機構的取代對應。

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

另請參閱

類別概觀