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
函式。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應