共用方式為


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 模組類別

繼承階層架構

_ATL_MODULE

CAtlModule

CAtlModuleT

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::RunMessageLoopCAtlExeModuleT::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 reMessageLoopCAtlExeModuleT::P ostMessageLoopCAtlExeModuleT::RunMessageLoop 無法提供足夠的彈性,可以使用此方法覆寫WinMain函式。

另請參閱

ATLDuck 範例
CAtlModuleT 類別
CAtlDllModuleT 類別
類別概觀