用 C++ 创建简单的 Win32 服务程序
2006-07-20 11:41:12 来源:WEB开发网核心提示: class CNTService{[...]// 静态数据static CNTService* m_pThis; // nasty hack to get object ptr[...]};下面是初始化 m_pThis 指针的方法:CNTService::CNTService(const
class CNTService
{
[...]
// 静态数据
static CNTService* m_pThis; // nasty hack to get object ptr
[...]
};
下面是初始化 m_pThis 指针的方法:
CNTService::CNTService(const char* szServiceName)
{
// Copy the address of the current object so we can access it from
// the static member callback functions.
// WARNING: This limits the application to only one CNTService object.
m_pThis = this;
[...]
}
CNTService 类
当我创建 C++ 对象封装 Windows 函数时,我尝试为我封装的每个 Windows API 除了创建成员函数外,还做一些别的工作,我尝试让对象更容易使用,降低实现特定项目所需的代码行数。因此我的对象是基于“我想让这个对象做什么?”而不是“Windows 用这些 APIs 做什么?”
CNTService 类包含一些用来解析命令行的成员函数,为了处理服务的安装和拆卸以及事件日志的记录,你得在派生类中重写一些虚拟函数来处理服务控制管理器的请求。下面我们将通过本文的例子服务实现来研究这些函数的使用。
如果你想创建尽可能简单的服务,只需要重写 CNTService::Run 即可,它是你编写代码实现具体服务任务的地方。你还需要实现 main 函数。如果服务需要实现一些初始化。如从注册表读取数据,还需重写 CNTService::OnInit。如果你要向服务发送命令消息 ,那么可以在服务中使用系统函数 ControlService,重写 CNTService::OnUserControl 来处理请求。
在例子应用程序中使用 CNTService
NTService 在 CMyService 类中实现了它的大多数功能,CMyService 由 CNTService 派生。 MyService.h 头文件如下:
更多精彩
赞助商链接