了解VS2005为你的MFC程序做的一些事

简介:
利用MFC向导建立一个工程,然后开始编码。这就是我通常做一个MFC工程的开始。但向导可不是一个守规矩的东西,它会为你添加很多的代码,为你设置大量的编译和链接选项。大部分时候这种工作是善意的,但是好心不一定办好事,你不好好了解它,它会给你带来很多的麻烦。
在配置一个基于OpenCasCade的程序中,我就遇到了很多麻烦。MFC向导在它所生成的View, Document等架构类中都添加了一段如下代码:
#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif
 
在Debug状态下(VS会为你默认添加一个_DEBUG的预编译项),你在该类中调用的new操作符都会被DEBUG_NEW所取代,请警惕这个行为,如果你重载过某个类的new,很可能就会由于它导致无法编译通过或运行不正确。
除此之外一些默认的设置也要注意,在VS2005中是默认支持Unicode的,它会在你的编译选项中加入/D "_UNICODE" /D "UNICODE"。这就会使得CString和你可能用到的std::string存在很麻烦的转换问题。你需要修改项目属性中General-->Character Set为not set,将其设为ununicode,保证与std::string的一致(当然你还可以运用其他的解决方法满足你的需求)。
有时候IDE也会“好心办坏事”,比如在一个解决方案中有两个工程,你为A添加B的编译依赖,在A的链接选项中就会悄悄加上对B生成的dll的引用。当你某天整理代码取消了这个依赖的时候,你突然发现莫名的出现了很多link错误。不要慌张,在A中添加上B链接项就好了,这项工作其实是你必须自己做的,只是你添加了依赖编译器非常主动的帮你完成了。
也许你看上面的错误都很简单,但如果不小心,也许有天也会像我一样深陷其中半天爬不出来。总之,在天天用VS2005建MFC工程的时候,提前做好两件事。一件是通读一遍系统默认生成的代码,做到心中有数,每一条莫名其妙的东西都要了解一下它的用途;另一件是在刚开始和改变了工程属性之后查看一下你的编译和链接命令,搞清楚它做了什么事,有时候命令行虽然难记一点,但确实是一目了然,你可以不必每天用命令行编译程序,但一定要对这些命令心如明镜,了如指掌才好。









本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/362867,如需转载请自行联系原作者
目录
相关文章
|
2月前
MFC编程 -- 添加菜单
MFC编程 -- 添加菜单
13 0
|
10月前
|
C++
C++分文件编写:拆类(.h和.cpp文件)
C++分文件编写:拆类(.h和.cpp文件)
91 0
|
索引
驱动开发:PE导出函数与RVA转换
在笔者上篇文章`《驱动开发:内核扫描SSDT挂钩状态》`中简单介绍了如何扫描被挂钩的SSDT函数,并简单介绍了如何解析导出表,本章将继续延申PE导出表的解析,实现一系列灵活的解析如通过传入函数名解析出函数的RVA偏移,ID索引,Index下标等参数,并将其封装为可直接使用的函数,以在后期需要时可以被直接引用,同样为了节约篇幅本章中的`LoadKernelFile()`内存映射函数如需要使用请去前一篇文章中自行摘取。
187 0
|
Linux
MSVC编译多个C程序文件
MSVC编译多个C程序文件
131 0
|
C++
MFC程序的创建+一个简单的消息映射的实现
MFC程序的创建+一个简单的消息映射的实现
92 0
MFC程序的创建+一个简单的消息映射的实现
|
Java Unix
在MFC程序中添加全屏显示功能
这是工作室为实现全屏显示所发集的一个演示程序。你可以通过选择全屏显示菜单选项时看到相应的效果。这段代码包括两个内容:全屏显示,浮动工具条(用于恢复操作)。
1333 0
|
SQL 数据库 C++