vc,6.0,不规范的地方_第1页
vc,6.0,不规范的地方_第2页
vc,6.0,不规范的地方_第3页
vc,6.0,不规范的地方_第4页
vc,6.0,不规范的地方_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

vc,6.0,不规范的地方篇一:VC+ 小技巧如何修改应用程序的名字+VC+的 18 个实用小技巧 如何修改应用程序的名字 在 ProjectSettingLink:outputfilenameDebug/ - 的 18 个实用小技巧 1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号、方括号、圆括号()和尖括号)前面,键入快捷键“Ctrl+” 。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。 2.查看一个宏(或变量、函数)的宏定义 把光标移动到你想知道的一个宏上,就比如说最常见的 DECLARE_MAP_MESSAGE 上按一下 F12(或右键菜单中的Go To Defition Of ?),如果没有建立 Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。相当可喜的是,它也可以看到 Microsoft 定义的系统宏,非常 good. 3.格式化一段乱七八糟的源代码 选中那段源代码,按 ATL+F8。 4.在编辑状态下发现成员变量或函数不能显示 删除该项目扩展名为.ncb 文件,重新打开该项目。 5.如何整理 ClassView 视图中大量的类 可以在 classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了. 6.定位预处理指定 在源文件中定位光标到对称的#if, #endif,使用Ctrl+K. 7.如何添加系统中 Lib 到当前项目在 Project | Settings | Link | Object/library modules:输入 Lib 名称,不同的 Lib 之间用空格格开. 8.如何添加系统中的头文件(.h)到当前项目. #include ,告诉编译到 VC 系统目录去找;使用#include “,告诉编译在当前目录找. 9.如何在 Studio 使用汇编调试 在 WorkBench 的 Debugger 状态下按 CTRL+F7. 10.怎样处理 ClassZiard 找不到的系统消息 如果要在 ClassWizard 中处理 WM_NCHITTEST 等系统消息,请在 ClassWizard 中 Class Info 页中将 Message filter 改为 Window 就有了. 11.如何干净的删除一个类 先从 Workspace 中的 FileView 中删除对应的.h 和.cpp 文件,再关闭项目,从实际的文件夹中删除对应的.h 和.cpp 文件与.clw 文件。 12.在 Studio 中快速切换两个文件 有时,我们需要在最近使用的两个文件中快速切换,换 Ctrl+F6。这在两个文件不相今的时候就有用的. 13.取得源程序预处理后的结果: 在 Studio 里,可以在-PROJECT- SETTINGS-C/C+-Project Options 中,在最后加上 /P /EP 这两个编译开关即可做到“只进行预处理“.就可以了。编译以后就可以在源程序目录中发现“文件名.I ”的文本文件。这就是预处理后的结果。 (注意注:区分大小定,请用大定/P) 14.在 Debug 模式中查看 WINAPI 调用后的返回值: 很简单,且实用:在 watch 中加入hr,err。在 CSDN的文档中心有一篇讲得更细,请参考。 15.产生指定源程序文件的汇编代码: 从 IDE 菜单的 Project-Setting 打开项目设置,按如下文件做: 1.先在左边选择指定文件,可以多选。2. 在右边的 C+属性页中,在 category 中选择 List Files,接着在下面的 List Files Type 中选择 Assembly and source code(或选择其它),最后在 List File Name中输入在个 C/C+源文件产生的相应的汇编代码的文件。 3.编译整个工程。 16.手工编译纯资源成 dll: /v /machine:ix86 Link /SUBSYSTEM:WINDOWS /DLL /NOENTRY ;编译成DLL 文件这种方式创建的 DLL 是最小的,比起你用 Win 32 Dynamic Libray 等产生的更小。 17:怎样快速生成一个与现有项目除了项目名外完全相同的新项目? 利用 File 菜单下生成新项目中的 Custom AppWizard ,选择 An existing Project ,然后选择现有项目的项目文件名(*.dsp)Finish,编译后就生成一个可以生成与现有项目相同但可以重新取名的项目的 AppWizard。你可以 象用 MFC AppWizard 一样用它。如果不想用了,可以在 VC 安装目录下 CommonMSDev98Template 目录中删除该 Wizard 中.awx 和 .pdb 文件。18:如果想把整个项目拷贝到软盘,那些文件可以删掉? 除了项目文件夹中 debug 文件夹可以删除外,.(来自: 小 龙 文档网:vc,不规范的地方)ncb,.clw,.opt 等文件也可以删除,这些文件 Rebuilt all 后可以重新生成。 附:VC 项目文件说明 .dsp 项目参数配置文件,这个文件太重要,重点保护对象。. .dsw 工作区文件,重要性一般,因为它信息不我,容易恢复。 以下文件在项目中是可丢弃的,有些文件删除后,VC会自动生成的。.clw ClassWizard 信息文件,实际上是 INI文件的格式,有兴趣可以研究一下.有时候 ClassWizard 出问题,手工修改 CLW 文件可以解决.如果此文件不存在的话,每次用 ClassWizard 的时候绘提示你是否重建. .ncb 无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。build 后会自动生成。.opt 工程关于开发环境的参数文件。如工具条位置等信息;(可丢弃) .aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他plg 是编译信息文件,编译时的 error 和warning 信息文件(实际上是一个 html 文件),一般用处不大.在Tools-Options 里面有个选项可以控制这个文件的生成.hpj (Help Project)是生成帮助文件的工程,用microsfot Help Compiler 可以处理. .mdp (Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP 格式. .bsc 是用于浏览项目信息的,如果用 Source Brower的话就必须有这个文件.如果不用这个功能的话,可以在Project Options 里面去掉 Generate Browse Info File,可以加快编译速度. .map 是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着. .pch (Pre-Compiled File)是预编译文件,可以加快编译速度,但是文件非常大. .pdb (Program Database)记录了程序有关的一些数据和调试信息,在调试的时候可能有用. .exp 只有在编译 DLL 的时候才会生成,记录了 DLL 文件中的一些信息.一般也没什么用. 篇二:编译错误解决方法集锦最近打算学习一下网络编程,而大部分 socket 编程环境都是 Unix 的,很是不便,在 windows 中总是不能编译,特寻得一篇文章解决此痒。爽哉、爽哉! linking. :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol s :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol s :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol :errorlnkXX:uesolvedexternalsymbol 原因和解决办法: 找不到相应函数,问题是 Link 选项里没有加入相应的 lib 库,winsock 要连接。特定库的找到办法是看 LNKXX中找不到的函数名,通过 msdn 或者其他手段获取这个函数所在的库名,链接进去就 OK 了。 可以在 project-setting-Link-object/library modules 里添加, 也可在里添加 #pragma comment(lib,“) 一般来说, 这是工程的类型选择错误引起的.如在 VC中, 1.本来应该选择“Win32 Console Application“,而错误选择了“Win32 Application“ 2.使用了 MFC 的类,而选择“工程“的“设置“不使用 MFC 库编译. 改正的方法有: 1. 选择“工程“- “设置“- 连接,在底部的编辑窗口中,找到“/subsystem“,把其改成 “/subsystem:console“ “/subsystem:windows“. 2.在“工程“- “设置“-“一般“选项中,在 MFC 项中改为“USE MFC AS A SHARED DLL“.用 VC时经常会遇到链接错误 LNKXX,该错误非常讨厌,因为对于 编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。产生连接错误的原因非常多,尤其 LNKXX 错误,常常使人不明其所以然。如果不深入地学习和理解 VC,要想改正连接错误 LNKXX 非 常困难。 初学者在学习 VC的过程中,遇到的 LNKXX 错误的错误消息主要 为: uesolvedexternalsymbol“symbol”(不确定的外部“符号” ) 。 如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用 的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本 的连接库。 以下是可能产生 LNKXX 错误的原因:一由于编码错误导致的 LNKXX。 1不相匹配的程序代码或模块定义(.DEF)文件能导致 LNKXX。例如, 如果在 C源文件内声明了一变量“var1” ,却试图在另一文件内以变量 “VAR1”访问该变量,将发生该错 误。 2如果使用的内联函数是在.CPP 文件内定义的,而不是在头文件内定 义将导致 LNKXX 错误。 3调用函数时如果所用的参数类型同函数声明时的类型不符将会产 生 LNKXX。 4试图从基类的构造函数或析构函数中调用虚拟函数时将会导致 LNKXX。 5要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问 任何没有在该文件内声明的静态变量时将导致编译错误或 LNKXX。 函数内声明的变量(局部变量)只能在该函数的范围内使 用。 C的全局常量只有静态连接性能。这不同于C,如果试图在 C的 多个文件内使用全局变量也会产生 LNKXX 错误。一种解决的方法是需要时在 头文件中加入该常量的初始化代码,并在.CPP 文件中包含该头文件;另一种 方法是使用时给该变量赋以常数。 二由于编译和链接的设置而造成的 LNKXX 1如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行 库和 MFC库在连接时由编译器写入目标文件模块,但除非在文件中明确包含 这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD 将导 致错误 LNKXX。 2如果没有为 wWinMainCRTStartup 设定程序入口,在使用 Unicode和 MFC 时将得到 “uesolvedexternalon”的 LNKXX 错误信息。 3使用/MD 选项编译时,既然所有的运行库都被保留在动态链接库之内, 源文件中对“func”的引用,在目标文件里即对“_imp_func”的引 用。 如果试图使用静态库或进行连接,将在_imp_func 上发 生 LNKXX;如果不使用/MD 选项编译,在使用连接时也会发生 LNKXX。 4使用/ML 选项编译时,如用链接会在_errno 上发生 LNKXX。 5当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产 生LNKXX;同样,使用调试版模态库连接发行版应用程序时也会产生相同的 问题。 6不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可 能包含早先的版本没有的符号和说明。 7在不同的模块使用内联和非内联的编译选项能够导致 LNKXX。如果 创建 C库时打开了函数内联(/Ob1 或/Ob2),但是在描述该函数的相应头 文件里却关闭了函数内联(没有 inline 关键字) ,这时将得到该错误信息。 为避免该问题的发生,应该在相应的头文件中用 inline 关键字标志内联函数。 8不正确的/SUBSYSTEM 或/ENTRY 设置也能导致 LNKXX。 其实,产生LNKXX 的原因还有很多,以上的原因只是一部分而已,对初 学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错 误的发生。LNKXX 错误虽然比较困难,但是只要注意到了上述问题,还是能 够避免和予以解决的。 1、fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include “) 2、fatal error C1083: Cannot open include file: R.h: No such file or directory 不能打开包含文件“R.h”:没有这样的文件或目录。3、error CXX: C: class type redefinition 类“C”重定义。 4、error C2018: unknown character 0xa3 不认识的字符0xa3。(一般是汉字或中文标点符号) 5、error C2057: expected constant expression 希望是常量表达式。(一般出现在 switch 语句的 case分支中) 6、error C2065: IDD_MYDIALOG : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。 7、error C2082: redefinition of formal parameter bReset 函数参数“bReset”在函数体中重定义。 8、error C2143: syntax error: missing : before 句法错误:“”前缺少“;” 。 9、error C2146: syntax error : missing ; before identifier dc 句法错误:在“dc”前丢了“;” 。 10、error C2196: case value 69 already used 值 69 已经用过。(一般出现在 switch 语句的 case 分支中) 编程中经常能遇到 LNKXX 错误重复定义错误,其实 LNKXX 错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。造成 LNKXX 错误主要有以下几种情况: 1重复定义全局变量。可能存在两种情况:A、对于一些初学编程的程序员,有时候会以为需要使 用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个 CPP文件中定义如下:intg_Test;那么在使用的 CPP 文件中就应该使用:externintg_Test 即可,如果还是使用intg_Test,那么就会产生 LNKXX 错误,一般错误错误信息类似: ?。切记的就是不能给变量赋值否则还是会有 LNKXX错误。 这里需要的是“声明” ,不是“定义”!根据 C+标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义: (1)声明必须使用 extern 关键字;(2)不能给变量赋初值 所以,下面的是声明 : externinta; 下面的是定 义 inta;inta=0;externinta=0; B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中随意定义一个全局变量,并且对于变量名也不予考虑,这也往往容易造成变量名重复,而造成 LNKXX 错误。2头文件的包含重复。往往需要包含的头文件中含有变量、函数、类的定义,在其它使用的地方又不得不多次包含之,如果头文件中没有相关的宏等防止重复链接 的措施,那么就会产生 LNKXX 错误。解决办法是在需要包含的头文件中做类似的处理:#ifndefMY_H_FILE /如果没有定义这个宏 #defineMY_H_FILE /定义这个宏 . /头文件主体内 容 . #endif 上面是使用宏来做的,也可以使用预编译来做,在头文件中加 入: #pragmaonce /头文件主体 3 使用第三方的库造成的。这种情况主要是 C 运行期函数库和 MFC 的库冲突造成的。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的 C 函数库,可能会引起这个错误。微软和 C 有两种 C 运行期函数库,一种是普通的函数库:,不支持多线程。另外一种是支持多线程的: 。如果一个工程里,这两种函数库混合使用,可能会引起这个错误,一般情况下它需要 MFC的库先于 C 运行期函数库被链接,因此建议使用支持多线程的。所以在使用第三方的库之前首先要知道它链接的是什么库,否则就可能造成 LNKXX 错误。如果不得不使用第三方的库,可以尝试按下面所说的方法修改,但不能保证一定能解决问题,前两种方法是微软提供的: A、选择 VC菜单 Project-Settings-Link-Catagory 选择 Input,再在 Ignorelibraries 的 Edit 栏中填入你需要忽略的库,如:;。然后在 Object/libraryModules 的 Edit 栏中填入正确的库的顺序,这里需要你能确定什么是正确的顺序,呵呵,Godblessyou! B、选择 VC 菜单 Project-Settings-Link 页,然后在 ProjectOptions 的 Edit 栏中输入/verbose:lib,这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。 C、选择 VC 菜单 Project-Settings-C/C+页,Catagory 选择 CodeGeneration 后再在 UserRuntimelibraray 中选择 MultiThreadDLL 等其他库,逐一尝试。 关于编译器的相关处理过程,参 考: archive/XX/12/23/ 这就是我所遇到过的LNKXX 错误的几种情况,肯定还有其他的情况也可能造成这种错误,所以我不希望你在看完这篇文章以后,再遇到LNKXX 错误时候,不动脑筋的想对号入座的排除错误。编程的过程就是一个思考的过程,所以还是多多开动你的头脑,那样收获会更多! 方案二、 LNKXX.already defined.ERROR 链接时出错提示:() : error LNKXX: _amsg_exit already defined in () () : error LNKXX: _initterm_e already defined in () () : error LNKXX: _exit already defined in () () : error LNKXX: _exit already defined in () () : error LNKXX: _cexit already defined in () () : error LNKXX: _fflush already defined in () () : error LNKXX: _configthreadlocale already defined in () () : error LNKXX: _encode_pointer already defined in () () : error LNKXX: _decode_pointer already defined in () () : error LNKXX: _invoke_watson already defined in () () : error LNKXX: _realloc already defined in () () : error LNKXX: _xi_a already defined in () () : error LNKXX: _xi_z already defined in () () : error LNKXX: _xc_a already defined in () () : error LNKXX: _xc_z already defined in () () : error LNKXX: “void _cdecl terminate(void)“ () already defined in () () : error LNKXX: _XcptFilter already defined in () () : error LNKXX: _unlock already defined in () () : error LNKXX: _lock already defined in () () : error LNKXX: _errno already defined in () () : error LNKXX: _mainCRTStartup already defined in () () : error LNKXX: _set_app_type already defined in () () : error LNKXX: _isctype already defined in () () : error LNKXX: _tolower already defined in ()解决方案: Project Properties, Linker, Input, 右边有个 Ignore Specific Library,输入“,确定即可。 方案三、 error LNKXX: already defined in 处理方法 VC+中编译链接过程出错: () : error LNKXX: already defined in 症状当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNKXX 错误之一: () :error LNKXX: “void * _cdecl operator new(unsigned int)“() already defined in () () :error LNKXX: “void _cdecl operator delete(void *)“() already defined in () () :error LNKXX: “void * _cdecl operator new(unsigned int,int,char const *,int)“ () already defined in () ():error LNKXX:_DllMain12 already defined in () ():error LNKXX:_DllMain12 already defined in () 原因 CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。 解决方案一:强制链接器按照正确的顺序链接库 1. 在“项目”菜单上,单击“设置” 。 2. 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。 3. 在“链接”选项卡上,单击以选中“类别”组合框中的“输入” 。 4. 在“忽略库”框中,插入库名(例如,;) 。 注意:等效的链接器命令行是:/NOD:。 5. 在“对象/库模块”框中,插入库名。必须确保这些库按顺序列出,而且是行中的前两个库(例如, 和 ) 。 要在 Visual C+ .NET 中设置该选项,请阅读“设置 Visual C+ 项目属性”联机帮助主题。 解决方案二:找到并纠正出现问题的模块要查看当前的库链接顺序,请按照下列步骤操作: 1. 在“项目”菜单上,单击“设置” 。 2. 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。 3. 在“链接”选项卡上的“项目选项”框中键入 /verbose:lib。 4. 重新生成项目。在链接过程中,这些库将在输出窗口中列出。 状态这种现象是设计导致的。 更多信息使用 MFC 库时,务必先链接它们,然后再链接 CRT 库。这可以通过确保项目中的每个文件都首先包含 MsdevMfcInclude 来完成。直接包含 (#include ) 或间接包含 (#include ) 都可以。 包含文件会通过使用 #pragma comment (lib,“ “) 指令来强制采用库的正确顺序。 如果源文件的扩展名为 .c,或者该文件的扩展名为 .cpp 但不使用 MFC,则可以创建一个较小的头文件 () 并将其放在模块的顶端。这个新的头文件可确保按照正确的顺序搜索库。 Visual C+ 不包含该头文件。要创建此文件,请按照下列步骤操作: 1. 打开 MsdevMfcInclude。 2. 选定 #ifndef _AFX_NOFORCE_LIBS 和 #endif /!_AFX_NOFORCE_LIBS 之间的行。 3. 将选定部分复制到 Windows 剪贴板。 4. 创建一个新文本文件。 5. 将剪贴板的内容粘贴到这个新文件中。 6. 将该文件另存为 MsdevMfcInclude。 在 Visual C+ .NET 中重现问题的步骤 1. 启动 Microsoft Visual Studio .NET。 2. 在“文件”菜单 篇三:关于解决不能打开文件的解决方法找了好久才找到这个解决方法!认真按照下面的操作吧!(最好自己多试几遍) 运行安装程序,会弹出如下的的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论