#include <afxwin.h>和#include <atlbase.h>的先后顺序:
在stdafx.h文件中包含这两个头文件:#include <afxwin.h>和#include <atlbase.h>
以便在ATL的Service工程中使用MFC的对象。
要是
#include <afxwin.h>
#include <atlbase.h>
则#include <atlbase.h>会不起作用,即会有
error C2504: “CAtlServiceModuleT”: 未定义基类  等这些错误;要是
#include <atlbase.h>
#include <afxwin.h>
则又会有以下错误:
fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>请问高手这个问题应怎解决?

解决方案 »

  1.   

    我估计是 Exe 初始化冲突的问题。所以,CAtlExeModuleT 只有在 没有定义 _AFX 的时候才被定义。所以如果添加 afxXXX.h 的话就不能定义 CAtlExeModuleT。我觉得好像,创建服务和进程外组件的时候不能使用 MFC 选项的。(曾经很纠结于这个)你可以自己写一个 CAtlExeModuleT。
      

  2.   

    楼上说的,我没明白。
    class CDongGuanServerModule : public CAtlServiceModuleT< CDongGuanServerModule, IDS_SERVICENAME >
    这个是我定义的类:CDongGuanServerModule 
    这个类的基类是在atlbase.h定义的。如果#include <atlbase.h>不起作用的话,CAtlServiceModuleT这个类就是未定义的。
      

  3.   

    在 atlbase.h 里面定义的 CAtlServerModuleT 是继承于 CAtlExeModuleT 的。
    而 这两个模块是被 _AFX 屏蔽的。如果你确实需要这样,试试 CAtlMfcModule 这个,不过我从来没有用过。
    因为我从来不在 ATL 项目中使用 MFC。
      

  4.   

    请问楼上的朋友:因为我想在项目中使用CAsyncSocket类编写网络通信程序,CAsyncSocket类是在MFC下的类吧,如果不用MFC的话,这个也就用不了了。所以最好是能使用MFC的对象了。如果不用MFC,CAsyncSocket相关的网络编程技术应该怎加上去?
      

  5.   

    不是有 WinSock 吗?而且,我估计添加 MFC 也不是仅仅添加文件头。MFC 需要自己的初始化的。
    比如 CWinApp 的实例化。
    我估计你需要注册、删除、启动、停止等等了。
    自己找一个手动写的服务程序样例,我记得是有的。
    只是自从用 ATL 模板了,我不太记得了。
      

  6.   

    #include <afxwin.h>
    好像没有必要,你又不使用CWnd类
    afxsock.h应该足够
    C1189好像在MSDN有说明
      

  7.   

    修改成不加入MFC了,用其他代替一样能行。