CAtlExeModuleT 类
此类表示应用程序的模块。
语法
template <class T>
class ATL_NO_VTABLE CAtlExeModuleT : public CAtlModuleT<T>
参数
T
你的类派生自 CAtlExeModuleT
。
成员
公共构造函数
名称 | 描述 |
---|---|
CAtlExeModuleT::CAtlExeModuleT | 构造函数。 |
CAtlExeModuleT::~CAtlExeModuleT | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CAtlExeModuleT::InitializeCom | 初始化 COM。 |
CAtlExeModuleT::ParseCommandLine | 分析命令行并根据需要执行注册。 |
CAtlExeModuleT::PostMessageLoop | 在消息循环退出后立即调用此方法。 |
CAtlExeModuleT::PreMessageLoop | 在进入消息循环之前的那一刻调用此方法。 |
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::ParseCommandLine
分析命令行并根据需要执行注册。
bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();
参数
lpCmdLine
传递给应用程序的命令行。
pnRetCode
对应于注册的 HRESULT(如果已发生注册)。
返回值
如果应用程序应继续运行,则返回 true,否则返回 false。
备注
此方法是从 CAtlExeModuleT::WinMain 调用的,可以重写以处理命令行开关。 默认实现会检查 /RegServer 和 /UnRegServer 命令行参数,并执行注册或注销操作。
CAtlExeModuleT::PostMessageLoop
在消息循环退出后立即调用此方法。
HRESULT PostMessageLoop() throw();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
重写此方法以执行自定义应用程序清理。 默认实现调用 CAtlExeModuleT::RevokeClassObjects。
CAtlExeModuleT::PreMessageLoop
在进入消息循环之前的那一刻调用此方法。
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;如果没有要注册的类,则返回 S_FALSE;如果失败,则返回错误 HRESULT。
CAtlExeModuleT::RevokeClassObjects
删除类对象。
HRESULT RevokeClassObjects() throw();
返回值
如果成功,则返回 S_OK;如果没有要注册的类,则返回 S_FALSE;如果失败,则返回错误 HRESULT。
CAtlExeModuleT::Run
此方法在 EXE 模块中执行代码,以便进行初始化、运行消息循环以及进行清理。
HRESULT Run(int nShowCmd = SW_HIDE) throw();
参数
nShowCmd
指定如何显示窗口。 此参数可以是 WinMain 部分中所述的值之一。 默认值为 SW_HIDE。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
可以重写此方法。 但实际上,最好是改为重写 CAtlExeModuleT::PreMessageLoop、CAtlExeModuleT::RunMessageLoop 或 CAtlExeModuleT::PostMessageLoop。
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::PreMessageLoop、CAtlExeModuleT::PostMessageLoop 或 CAtlExeModuleT::RunMessageLoop 没有提供足够的灵活性,可以使用此方法重写 WinMain
函数。