非MFC工程使用MFC库时的问题及解决办法
2008-06-12 20:03
363 查看
一、问题由来
vc6和vc7的工程向导中都包含非MFC的工程,诸如win32 console project, win32 static library。非MFC工程创建时是不支持MFC特性的,然后我们在处理实际问题时有时会用到MFC相关类,如Cstring, Cedit等等,这是很正常的。可能有人会说,为何不在一开始就创建MFC工程呢?问题在于MFC工程会产生很多向导生成代码,如基于单文档的工程会有View,Doc等类,很多时候我们只需要一个空工程就可以了。
二、常见问题
非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误,具体如下:
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
三、解决办法
非MFC工程使用MFC库时,可参考以下步骤
1、工程设置中,将MFC的使用由原来的“使用标准windows库”改为“在共享DLL中使用MFC”(VC71)
如果是英文版,相关选项是:
Microsoft Foundation Classes: Use MFC in a shared dll, no using MFC(VC6)
NOTE:因为我用的是中文版的vc71,英文版的vc6.
2、头文件包含
不同的MFC类需包含的头文件是不一样的。
常用的类,如Cstring, Cedit 等,包含afxwin.h就可以了
如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header file requirement.
3、#include 语句一定要写在首行
这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#include 语句没有写在首行。
另外还要注意的是,如果#include语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:
=============
test.h文件的内容如下:
#include <afxwin.h> //保证该语句在首行
test.cpp的文件内容如下:
#include “test.h” //同样也要保证该语句在首行
=============
ps: 这么做的具体原因我也不知道,我是在实际调试中琢磨出这个道理的。我自己在这个问题上花了很多冤枉时间,写下该篇,就是希望大家不要在这个问题上绊脚。
vc6和vc7的工程向导中都包含非MFC的工程,诸如win32 console project, win32 static library。非MFC工程创建时是不支持MFC特性的,然后我们在处理实际问题时有时会用到MFC相关类,如Cstring, Cedit等等,这是很正常的。可能有人会说,为何不在一开始就创建MFC工程呢?问题在于MFC工程会产生很多向导生成代码,如基于单文档的工程会有View,Doc等类,很多时候我们只需要一个空工程就可以了。
二、常见问题
非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误,具体如下:
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
三、解决办法
非MFC工程使用MFC库时,可参考以下步骤
1、工程设置中,将MFC的使用由原来的“使用标准windows库”改为“在共享DLL中使用MFC”(VC71)
如果是英文版,相关选项是:
Microsoft Foundation Classes: Use MFC in a shared dll, no using MFC(VC6)
NOTE:因为我用的是中文版的vc71,英文版的vc6.
2、头文件包含
不同的MFC类需包含的头文件是不一样的。
常用的类,如Cstring, Cedit 等,包含afxwin.h就可以了
如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header file requirement.
3、#include 语句一定要写在首行
这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#include 语句没有写在首行。
另外还要注意的是,如果#include语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:
=============
test.h文件的内容如下:
#include <afxwin.h> //保证该语句在首行
test.cpp的文件内容如下:
#include “test.h” //同样也要保证该语句在首行
=============
ps: 这么做的具体原因我也不知道,我是在实际调试中琢磨出这个道理的。我自己在这个问题上花了很多冤枉时间,写下该篇,就是希望大家不要在这个问题上绊脚。
相关文章推荐
- 非MFC工程使用MFC库时的问题及解决办法
- 非MFC工程使用MFC库时的问题及解决办法【转贴】
- 非MFC工程使用MFC库时的问题及解决办法
- 非MFC工程使用MFC库时的问题及解决办法
- 非MFC工程使用MFC库时的问题及解决办法
- 使用Cornerstone更新后工程打不开问题的解决办法
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- 关于MFC CFileDlg使用,析构时访问空指针崩溃问题的解决办法
- 使用自定义图标的MFC工程因原图标文件丢失无法building的解决办法
- MFC工程,字符集使用多字节,界面就变成WIN95风格的解决办法
- MFC中CRectTracker在CScrollView中使用时问题的解决办法
- “Visual Studio 2008 + IE8下,为MFC工程对话框资源添加类时发生错误”问题的解决办法
- MFC中使用SetWindowPos GroupBox遮盖内部控件问题解决办法
- VS 2005环境下MFC工程断点停不住的问题及解决办法
- JBoss-5.0.0.GA 使用过程中问题解决办法
- 使用EMCV出现missing DW_AT_name attribute问题的解决办法
- 使用m2e将工程转化为maven工程后eclipse报Plugin execution not covered by lifecycle configuration:xxx plugin问题的解决方法
- discuz安装使用问题与解决办法
- Unity3D使用SQLite——Android应用开发时问题的解决办法
- CVS使用中遇到的问题及解决办法[随记]