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 模块类

继承层次结构

_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::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::PreMessageLoopCAtlExeModuleT::RunMessageLoopCAtlExeModuleT::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::PreMessageLoopCAtlExeModuleT::PostMessageLoopCAtlExeModuleT::RunMessageLoop 没有提供足够的灵活性,可以使用此方法重写 WinMain 函数。

另请参阅

ATLDuck 示例
CAtlModuleT 类
CAtlDllModuleT 类
类概述