CAtlDllModuleT 類別
這個類別代表應用程式的模組。
語法
template <class T>
class ATL_NO_VTABLE CAtlExeModuleT : public CAtlModuleT<T>
參數
T
衍生自 CAtlExeModuleT
的類別。
成員
公用建構函式
名稱 | 描述 |
---|---|
CAtlExeModuleT::CAtlExeModuleT | 建構函式。 |
CAtlExeModuleT::~CAtlExeModuleT | 解構函式。 |
公用方法
名稱 | 描述 |
---|---|
CAtlExeModuleT::InitializeCom | 初始化 COM。 |
CAtlExeModuleT::P arseCommandLine | 剖析命令行,並視需要執行註冊。 |
CAtlExeModuleT::P ostMessageLoop | 這個方法會在訊息循環結束時立即呼叫。 |
CAtlExeModuleT::P reMessageLoop | 在輸入訊息迴圈之前,會立即呼叫這個方法。 |
CAtlExeModuleT::RegisterClassObjects | 註冊類別物件。 |
CAtlExeModuleT::RevokeClassObjects | 撤銷類別物件。 |
CAtlExeModuleT::Run | 這個方法會在 EXE 模組中執行程式碼,以初始化、執行訊息迴圈,以及清除。 |
CAtlExeModuleT::RunMessageLoop | 這個方法會執行訊息迴圈。 |
CAtlExeModuleT::UninitializeCom | 取消初始化 COM。 |
CAtlExeModuleT::Unlock | 遞減模組的鎖定計數。 |
CAtlExeModuleT::WinMain | 這個方法會實作執行 EXE 所需的程式代碼。 |
公用資料成員
名稱 | 描述 |
---|---|
CAtlExeModuleT::m_bDelayShutdown | 旗標,指出應該有延遲關閉模組。 |
CAtlExeModuleT::m_dwPause | 暫停值,用來確保關閉之前釋放所有物件。 |
CAtlExeModuleT::m_dwTimeOut | 用來延遲卸除模組的逾時值。 |
備註
CAtlExeModuleT
代表應用程式 (EXE) 的模組,並包含支援建立 EXE、處理命令行、註冊類別對象、執行訊息迴圈,以及在結束時清除的程式代碼。
這個類別的設計目的是在 EXE 伺服器中的 COM 物件持續建立和終結時改善效能。 釋放最後一個 COM 對象之後,EXE 會等候 CAtlExeModuleT::m_dwTimeOut 數據成員所指定的持續時間。 如果在此期間沒有活動(也就是未建立 COM 物件),則會起始關機程式。
CAtlExeModuleT::m_bDelayShutdown數據成員是用來判斷 EXE 是否應該使用上面定義的機制的旗標。 如果設定為 false,則模組會立即終止。
如需 ATL 模組的詳細資訊,請參閱 ATL 模組類別。
繼承階層架構
CAtlExeModuleT
需求
標頭: atlbase.h
CAtlExeModuleT::CAtlExeModuleT
建構函式。
CAtlExeModuleT() throw();
備註
如果無法初始化 EXE 模組,WinMain 會立即傳回而不進一步處理。
CAtlExeModuleT::~CAtlExeModuleT
解構函式。
~CAtlExeModuleT() throw();
備註
釋放所有已配置的資源。
CAtlExeModuleT::InitializeCom
初始化 COM。
static HRESULT InitializeCom() throw();
傳回值
傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。
備註
這個方法是從建構函式呼叫,而且可以覆寫以不同於預設實作的方式初始化 COM。 默認實作會呼叫 CoInitializeEx(NULL, COINIT_MULTITHREADED)
或 CoInitialize(NULL)
,視專案組態而定。
覆寫此方法通常需要覆寫 CAtlExeModuleT::UninitializeCom。
CAtlExeModuleT::m_bDelayShutdown
旗標,指出應該有延遲關閉模組。
bool m_bDelayShutdown;
備註
如需詳細資訊, 請參閱 CAtlExeModuleT 概觀 。
CAtlExeModuleT::m_dwPause
用來確保所有對象在關機前都已消失的暫停值。
DWORD m_dwPause;
備註
在呼叫 CAtlExeModuleT::InitializeCom 之後變更此值,以設定用來作為關閉伺服器之暫停值的毫秒數。 預設值為1000毫秒。
CAtlExeModuleT::m_dwTimeOut
用來延遲卸除模組的逾時值。
DWORD m_dwTimeOut;
備註
呼叫 CAtlExeModuleT::InitializeCom 之後變更此值,以定義用來作為關閉伺服器的逾時值毫秒數。 預設值是 5000 毫秒。 如需詳細資訊, 請參閱 CAtlExeModuleT 概觀 。
CAtlExeModuleT::P arseCommandLine
剖析命令行,並視需要執行註冊。
bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();
參數
lpCmdLine
傳遞至應用程式的命令行。
pnRetCode
對應至註冊的 HRESULT(如果發生的話)。
傳回值
如果應用程式應該繼續執行,則傳回 true,否則傳回 false。
備註
這個方法是從 CAtlExeModuleT::WinMain 呼叫,而且可以覆寫以處理命令行參數。 默認實作會 檢查 /RegServer 和 /UnRegServer 命令行自變數,並執行註冊或取消註冊。
CAtlExeModuleT::P ostMessageLoop
這個方法會在訊息循環結束時立即呼叫。
HRESULT PostMessageLoop() throw();
傳回值
傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。
備註
覆寫此方法以執行自訂應用程式清除。 默認實作會呼叫 CAtlExeModuleT::RevokeClassObjects。
CAtlExeModuleT::P reMessageLoop
在輸入訊息迴圈之前,會立即呼叫這個方法。
HRESULT PreMessageLoop(int nShowCmd) throw();
參數
nShowCmd
在 WinMain 中傳遞為 nShowCmd 參數的值。
傳回值
傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。
備註
覆寫此方法以新增應用程式的自定義初始化程序代碼。 默認實作會註冊類別物件。
CAtlExeModuleT::RegisterClassObjects
向 OLE 註冊類別物件,讓其他應用程式可以連線到它。
HRESULT RegisterClassObjects(DWORD dwClsContext, DWORD dwFlags) throw();
參數
dwClsContext
指定要執行類別物件的內容。 可能的值為CLSCTX_INPROC_SERVER、CLSCTX_INPROC_HANDLER或CLSCTX_LOCAL_SERVER。
dwFlags
決定類別對象的連接類型。 可能的值為REGCLS_SINGLEUSE、REGCLS_MULTIPLEUSE或REGCLS_MULTI_SEPARATE。
傳回值
傳回成功時S_OK,如果沒有要註冊的類別,或失敗時發生錯誤 HRESULT,則傳回S_FALSE。
CAtlExeModuleT::RevokeClassObjects
拿掉類別物件。
HRESULT RevokeClassObjects() throw();
傳回值
傳回成功時S_OK,如果沒有要註冊的類別,或失敗時發生錯誤 HRESULT,則傳回S_FALSE。
CAtlExeModuleT::Run
這個方法會在 EXE 模組中執行程式碼,以初始化、執行訊息迴圈,以及清除。
HRESULT Run(int nShowCmd = SW_HIDE) throw();
參數
nShowCmd
指定視窗的顯示方式。 此參數可以是 WinMain 區段中討論的其中一個值。 默認為 SW_HIDE。
傳回值
傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。
備註
這個方法可以覆寫。 不過,實際上最好覆寫 CAtlExeModuleT::P reMessageLoop、CAtlExeModuleT::RunMessageLoop 或 CAtlExeModuleT::P ostMessageLoop。
CAtlExeModuleT::RunMessageLoop
這個方法會執行訊息迴圈。
void RunMessageLoop() throw();
備註
您可以覆寫這個方法,以變更訊息循環的行為。
CAtlExeModuleT::UninitializeCom
取消初始化 COM。
static void UninitializeCom() throw();
備註
根據預設,這個方法只會呼叫 CoUninitialize ,並從解構函式呼叫。 如果您覆寫 CAtlExeModuleT::InitializeCom,請覆寫此方法。
CAtlExeModuleT::Unlock
遞減模組的鎖定計數。
LONG Unlock() throw();
傳回值
傳回值,這個值對診斷或測試很有用。
CAtlExeModuleT::WinMain
這個方法會實作執行 EXE 所需的程式代碼。
int WinMain(int nShowCmd) throw();
參數
nShowCmd
指定視窗的顯示方式。 此參數可以是 WinMain 區段中討論的其中一個值。
傳回值
傳回可執行檔的傳回值。
備註
這個方法可以覆寫。 如果覆寫 CAtlExeModuleT::P reMessageLoop、CAtlExeModuleT::P ostMessageLoop 或 CAtlExeModuleT::RunMessageLoop 無法提供足夠的彈性,可以使用此方法覆寫WinMain
函式。