我开始开发Windows服务。 我想用一些类从我自己的,有一点依赖于一些MFC类,如CString的,CSocket类,的CArchive,CMemFile和CObject的。 MSDN说你必须非常小心你的Windows服务使用的MFC片,但不指定它,不要说明了可能发生的问题。
我的问题是:
- 什么MFC件可以用吗?
- 我可以期待什么问题,通过使用MFC?
- 其中Windows服务的部分是MFC使用的关键?
- 是建议使用ATL代替MFC的Windows服务?
我开始开发Windows服务。 我想用一些类从我自己的,有一点依赖于一些MFC类,如CString的,CSocket类,的CArchive,CMemFile和CObject的。 MSDN说你必须非常小心你的Windows服务使用的MFC片,但不指定它,不要说明了可能发生的问题。
我的问题是:
我不知道他们格兰MSDN文章中的意思。 只要你不使用任何的GUI功能,你会被罚款 - 但开发服务时是一个普通的设计问题。
话虽这么说,ATL有专为建筑服务IIRC设计,所以你可能会更好使用该功能。
为了回答您的问题(据我所知):
1)你指定的人都没有问题。
2)我猜他们的意思是与UI组件的同步问题。 只要你不使用任何CWnd派生类,你会没事的。
3)不明白的问题。
4)请参阅之前,加上ATL是更轻巧,所以你必须分配较少的,并提供了内置的功能,将使其减少痛苦开发服务。 例如参见CAtlServiceModuleT。 你仍然能够大多使用自己的类,因为CString的是MFC和ATL之间共享和时下ATL有套接字编程和内存映射文件本身的类。 它不具有CArchive的等价物,且我不知道你的CObject使用什么功能,所以我不能说是否有在ATL等同。 因此得出结论,我会说“是”这个问题。
(我知道这个答案是有点晚,这个问题已经回答了,但MFC的服务是一个痛处我...)
CSockets,据我记得, 需要一个窗口 。 这使得在后台一个不可见的。 我发现这个硬盘的方式,当我试图包括一些原先存在的MFC代码到Windows服务。 也许这是唯一的要求,如果你接受的套接字连接 - 我不记得? 但它没有工作! (我究竟是如何浪费了太多的时间做这个W / O实现这一限制是一个很长的故事)
CObject的? 如果你需要运行时类ID的东西使用RTTI(dynamic_cast的,等...)
CString的,我喜欢CString的,我知道它现在与ATL共享,不知道你是否把它在W / O MFC或ATL包括...你可以使用的std :: string。 另外,我记得有人创建了一个派生的std :: string所提供的相同的方法CString的。 (编辑:发现代码 -男人!!这是从过去的爆炸......)
的CArchive,CMemFile:你真的需要这些?
无论如何,罗尔说,ATL可能会更有帮助。 我不会在服务器端应用程序(永远!)ATL使用MFC? 也许。 如果我需要COM,跃跃欲试。 没有COM但CAtlServiceModuleT,等等...也许....
而在服务约MFC另一件坏事,虽然试图把一个普通MFC-ATL应用到服务我刚刚经历:使用AfxConnectionAdvise的()是一个没有窗户的过程实际上是无用的。 在我服务的线程只是常规的非消息抽水线程。 我认为,这就是为什么我从来没有从我已经开发了另一种COM服务器触发的事件。 其他COM服务器挂在Fire_xxxEvent(),导致整个系统弄得一塌糊涂。