WEB开发网
开发学院软件开发VC 用 ATL 编写 Windows 服务 阅读

用 ATL 编写 Windows 服务

 2006-07-22 22:53:28 来源:WEB开发网   
核心提示: SERVICE_DEMAND_START是手动启动,SERVICE_AUTO_START是自动启动,用 ATL 编写 Windows 服务(3),第十一个参数是服务的依存关系,比如说服务的启动想要依存SQL Server的启动,看一下运行的结果,如下图四:图四好了,就写到这里吧,那我们可以

SERVICE_DEMAND_START是手动启动,SERVICE_AUTO_START是自动启动。第十一个参数是服务的依存关系,比如说服务的启动想要依存SQL Server的启动,那我们可以把这个参数写成:

_T("MSSQLSERVER\0");

如果我们写的服务不依存于其他的任何服务,那我们就将此参数设置为NULL就可以了。

接下来,我们为上面的"什么也不做"的服务添加一个简单的功能:做数字的累加,并且把结果写到系统的"应用程序日志"中去。

首先,我们在类CServiceModule中添加一个成员变量:int n; 在Init()中对n进行初始化:

n = 0;

然后在类CServiceModule中添加一个成员函数Adder():

void CServiceModule::Adder()
{
  n ++;
  CString str;
  str.Format("%i",n);
  LogEvent(str);
}

编译…出错了。??,提示 CString 没有定义,难道在ATL中无法用 MFC 吗?让我们看看设置:菜单Project->Setting ,General面板,默认的设置是:Use MFC in a Static Library。那为什么不可以用MFC中的类呢?原来是头文件没有包含,这个不知道算不算 VC 的一个 Bug : ,设置中默认是用MFC,可是却没有包含相应的头文件。那我们就自己加上好了。在StdAfx.h中加上:#include ,注意要加到#include 的前面,要不然又要编译出错了。接下来,我们在程序中再添加一个Timer,让这个Timer每两秒钟调用一次Adder,做一次累加。在:

MSG msg;
while (GetMessage(&msg, 0, 0, 0))
  DispatchMessage(&msg);

的前面加上代码:

SetTimer(NULL,1,2000,(TIMERPROC)OnTimerProc);

注意一定要加在前面,因为要是加到while循环的下面,就没有机会执行了。再添加一个全局的回调函数OnTimerProc 如下:

VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
  _Module.Adder();
}

好了,大功告成。编译,然后在SCM中启动我们的服务。在控制面板中打开"事件查看器",看一下运行的结果,如下图四:

图四

好了,就写到这里吧,其他的内容大家自己深究吧。祝各位编程愉快!

上一页  1 2 3 

Tags:ATL 编写 Windows

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接