如何添加Lib文件到当前工程
单击菜单【Project】->【Settings…】弹出Project Setting对话框切换到Link标签页在Object/library modules处输入Lib文件名称不同的Lib之间用空格格开
如何快速删除项目下的Debug文件夹中临时文件
在工作区的FileView视图中选中对应的项目单击右键弹出菜单选择【Clean(selection only)】菜单即可
如何快速生成一个现有工程除了工程名外完全相同的新工程
在新建工程的New对话框中选择Custom Appwizard项输入新工程的名字单击【OK】按钮出现Custom AppWizard项输入新工程的名字单击【OK】按钮出现Custom AppWizard-Step of 对话框选择An existing Project项单击【Next】按钮出现Custom AppWizard-Step of 对话框选择现有工程的工程文件名最后单击【Finish】按钮编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard
现在就可以项用MFC AppWizard一样用这个定制的向导如果不想用了可以在Visual C++ 安装目录下Common\MSDev\Template目录中删除该Wizard对应的awx和pdb文件
如何解决Visual C++ 不正确连接的问题
情景明明改动了一个文件却要把整个项目全部重新编译链接一次刚刚链接好一运行又提示重新编译链接一次
这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故可以这样处理找到工程文件夹下的debug目录将创建和修改时间都比系统时间的文件全部删除然后再从新Rebuild All一次
引起LNK的常见错误都有哪些
遇到的LNK错误主要为unresolved external symbol symbol
如果链接程序不能在所有的库和目标文件内找到所引用的函数变量或标签将产生此错误信息
一般来说发生错误的原因有两个一是所引用的函数变量不存在拼写不正确或者使用错误其次可能使用了不同版本的链接库以下是可能产生LNK错误的原因
<>由于编码错误导致的LNK错误
()不相匹配的程序代码或模块定义(DEF)文件导致LNK例如如果在C++源文件了内声明了一变量var却试图在另一个文件内以变量var访问改变量
()如果使用的内联函数是在cpp文件内定义的而不是在头文件内定义将导致LNK错误
()调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK错误
()试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK错误
()要注意函数和变量的可公用性只有全局变量函数是可公用的静态函数和静态变量具有相同的使用范围限制当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK错误
<>由于编译和联机的设置而造成的LNK错误
()如果编译时使用的是/NOD(/NODERAULTLIB)选项程序所需要的运行库和MFC时将得到又编译器写入目标文件模块但除非在文件中明确包含这些库名否则这些库不会被链接进工程文件这种情况下使用/NOD将导致LNK错误
()如果没有为wWinMainCRTStartup设定程序入口在使用Unicode和MFC时将出现unresolved external on _WinMain@的LNK错误信息
()使用/MD选项编译时既然所有的运行库都被保留在动态链接库之内源文件中对func的引用在目标文件里即对__imp__func的引用如果试图使用静态库LIBCLIB或LIBCMTLIB进行链接将在__imp__func上发生LNK错误如果不使用/MD选项编译在使用MSVCxxLIB链接时也会发生LNK错误
()使用/ML选项编译时如用LIBCMTLIB链接会在_errno上发生LNK错误
()当编译调试版的应用程序时如果采用发行版模态库进行链接也会产生LNK错误同样使用调试版模态库链接发行版应用程序时也会产生相同的错误
()不同版本的库和编译器的混合使用也能产生问题因为新版的库里可能包含早先的版本没有的符号和说明
()在不同的模块中使用内联和非内联的编译选项能够导致LNK错误如果创建C++库时打开了函数内联(/Ob或/Ob)但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字)只是将得到错误信息为避免该问题的发生应该在相应的头文件中用inline关键字标志为内联函数
()不正确的/SUBSYSTEM或ENTRY设置也能导致LNK错误
如何调试一个没有源码的exe文件调用的dll
在Visual C++ 中进入Project Setting对话框然后选择Debug标签页通常Visual Studio默认executable for debug session为可执行文件名但可以将他改成任何你想要的程序甚至可以指定不同的工作目录以及传递参数到你的程序这个技术常用来调试Dlls名字空间扩展COM对象和其他从某些EXE以及从第三方的EXE中调用的plugin程序
Visual C++ 工程中的项目文件都表示什么
opt工程关于开发环境的参数文件如工具条位置等信息
aps(AppStudio File)资源辅助文件二进制格式一般不用去管它
clwClassWizard信息文件实际上是INI文件格式有兴趣可以研究一下有时候ClassWizard出了问题手工修改CLW文件可以解决如果此文件不存在的话每次用ClassWizard的时候回提示是否重建
dsp(DevelopStudio Project)项目文件文本格式不过不熟悉的不要手工修改
dsw(DevelopStudio Workspace)是工作区文件其他特点和dsp差不多
plg是编译信息文件编译时的error和warning信息文件(实际上是一个html文件)一般用处不大在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成
hpj(Help Project)是生成帮助文件的工程用microsoft Help Compiler可以处理
mdp(Microsoft DevStudio Project)是旧版本的项目文件如果要打开此文件的话会提示你是否转换成新的dsp格式
bsc是用于浏览项目信息的如果用Source Brower的话就必须有这个文件如果不用这个功能的话可以在Project Options里面去掉Generate Browse Info File这样可以加快编译速度
map是执行文件的映象信息记录文件除非对系统底层这个文件一般用不着
pch(PreCompiled File)是与编译文件可以加快编译速度但是文件非常大
pdb(Program Database)记录了程序有关的一些数据和调试信息在调试的时候可能有用
exp只有在编译DLL的时候才会生成记录了DLL文件的一些信息一般也没有用
ncb无编译浏览文件(no compile browser)当自动完成功能出问题时可以删除此文件编译工程后会自动生成
[] []