用VC++ 7.0 ATL项目向导生成后得到几行代码:
class CTestATL2Module : public CAtlServiceModuleT< CTestATL2Module, IDS_SERVICENAME >
{
public : DECLARE_LIBID(LIBID_TestATL2Lib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_TESTATL2, "{F43C940A-BCA8-4F94-A5F1-0BE3A7E55606}")
};CTestATL2Module _AtlModule;
//
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, 
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
return _AtlModule.WinMain(nShowCmd);};察看相关文档发现 OnStop之类的可以override,但是run或者其他的并没有说明。
1、是不是在class里面声明
   virtual void OnStop();
   接下来实现就可以了?
   run函数呢?
2、谁能提供相关的例子代码?

解决方案 »

  1.   

    http://www.vckbase.com/document/listdoc.asp?mclsid=13&sclsid=1319
      

  2.   

    一个NT服务的框架
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=194346
      

  3.   

    多谢两位,这些文档我已经有了。我想要的是override CAtlServiceModuleT::Onstop、CAtlServiceModuleT::OnContinue、CAtlServiceModuleT::Run 看起来比较面向对象的代码。网上找的似乎都是面向过程写法的,封装的不漂亮。
      另外,用vc++7.0 生成的框架(没有加任何代码)直接注册后,在windows service里面可以看到,但是启动时报错:在本地计算机无法启动xx服务,错误5,拒绝访问。
      请问是什么原因?
      

  4.   

    如果设置好服务登录账号,启动时也报错:
    在本地计算机无法启动xx服务,服务并未返回错误,这可能是一个windows内部错误或者服务内部错误,如果服务持续存在,请与系统管理员联系。很奇怪啊,我设置的登录账号和我现在登录的是一致的,照理说会报一样的错,怎么变掉了。今天要交差,请各位多多帮忙。
      

  5.   

    再问个问题,SCM发出停止命令的时候,是否是启动了一个新的线程?我的意思是如果服务再做一个死循环(监测停止),它是否能够收到这个命令。
      

  6.   

    \msdn\Samples\VC98\sdk\sdktools\winnt\remote