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
衍生模組。
繼承階層架構
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 傳遞至 DLLMain
或 WinMain
。
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
為傳遞至 DLLMain
或WinMain
的句柄。
CComModule::m_hInstResource
自ATL 7.0起,已經過時:如需詳細資訊, CComModule
請參閱 ATL模組類別 。
HINSTANCE m_hInstResource;
備註
根據預設,包含模組實例的句柄。
Init 方法會將 設定m_hInstResource
為傳遞至 DLLMain
或WinMain
的句柄。 您可以明確地將 設定 m_hInstResource
為資源的句柄。
GetResourceInstance 方法會傳回儲存在 中的m_hInstResource
句柄。
CComModule::m_hInstTypeLib
自ATL 7.0起,已經過時:如需詳細資訊, CComModule
請參閱 ATL模組類別 。
HINSTANCE m_hInstTypeLib;
備註
根據預設,包含模組實例的句柄。
Init 方法會將 設定m_hInstTypeLib
為傳遞至 DLLMain
或WinMain
的句柄。 您可以明確地將 設定 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
呼叫 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 登錄元件(登錄器)一文。