首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows服务中使用MFC?

问在Windows服务中使用MFC?
EN

Stack Overflow用户
提问于 2009-07-22 08:43:16
回答 3查看 6.5K关注 0票数 6

我开始开发Windows服务了。我想使用我自己的一些类,这些类对一些MFC类几乎没有依赖,比如CString、CSocket、CArchive、CMemFile和CObject。MSDN说,您需要非常小心在Windows中使用哪些MFC,但不要指定它,也不要描述可能发生的问题。

我的问题是:

  • 可以使用哪些MFC片段?
  • 通过使用MFC,我能预料到什么问题?
  • Windows服务的哪些部分对于MFC的使用至关重要?
  • 在Windows服务中使用ATL而不是MFC是否可取?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-22 14:54:23

我不知道它们在MSDN文章中的意思。只要您不使用任何GUI功能,就可以了--但是在开发服务时,这是一个普遍的设计问题。

话虽如此,ATL有专门为构建服务IIRC而设计的功能,所以您最好使用该功能。

回答你们的问题(据我所知):

( 1)你指定的那些没有问题。

2)我猜它们是指UI组件的同步问题。只要您不使用任何CWnd派生类,就可以了。

3)不理解问题。

4)前面看到的,加上ATL更轻量级,所以您必须发布更少的版本,并提供内置功能,从而减少开发服务的难度。参见例如CAtlServiceModuleT。您仍然可以使用您自己的类,因为CString现在在MFC和ATL之间共享,ATL有用于套接字编程和内存文件映射本身的类。它没有与CArchive相当的功能,我也不知道您在CObject中使用了什么功能,所以我不能说ATL中是否有类似的功能。最后,我会对这个问题说“是”。

票数 4
EN

Stack Overflow用户

发布于 2009-08-19 19:36:49

(我知道这个答案有点晚了,这个问题已经回答了,但MFC在服务领域对我来说是个痛处。)

CSockets,据我所知,需要一个窗口。它使一个看不见的在背景中。当我尝试将一些预先存在的MFC代码包含到一个windows服务中时,我发现了这一点。也许只有当您接受套接字连接时才需要这样做--我想不起来了?,但是它没有工作!(我怎么浪费了这么多时间来做这个w/o,意识到这个限制是一个很长的故事)

CObject?如果您需要运行时类id,请使用RTTI (dynamic_cast等)

CString,我喜欢CString,我知道它现在已经和ATL共享了,不确定你是否在w/o MFC或ATL中加入了.您可以使用std::string。此外,我还记得有人创建了一个派生的std::string,它提供了与CString相同的方法。(编辑:找到代码 - man!那是过去的爆炸.)

CArchive,CMemFile:你真的需要这些吗?

不管怎样,正如Roel所说的,ATL可能更有帮助。我不会在服务器端应用程序中使用MFC (永远不会!)阿塔尔?也许吧。如果我需要COM,那就直截了当。除了CAtlServiceModuleT等..。也许..。

票数 3
EN

Stack Overflow用户

发布于 2010-03-02 19:31:00

还有一个关于MFC在服务中的坏处,我刚刚在尝试将一个常规的MFC应用程序转换为一个服务时就遇到了这个问题:如果没有窗口过程,使用AfxConnectionAdvise()实际上是无用的。我服务中的线程只是普通的非消息泵线程。我相信这就是为什么我从来没有从我开发的另一个COM服务器中触发事件。另一个COM服务器挂在Fire_xxxEvent()上,给整个系统造成很大的混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1163905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档