用VC来写程序,有时总是出这样那样的问题,没办法只能自己上网查资料来解决,在这里把自己常见的问题和一些技巧贴出来分享给大家,希望对大家有用,也省去大家再去搜索的烦恼……
1.如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database.在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
2. Release和Debug有什么不同
Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link.
3. ASSERT和VERIFY有什么区别
ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。例如ASSERT(file.Open(strFileName))。一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。
4.Workspace和Project之间是什么样的关系
每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting……中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。
5. 如何在非MFC程序中使用ClassWizard
在工程目录下新建一个空的。RC文件,然后加入到工程中就可以了。
6.如何设置断点
按F9在当前光标处增加一个断点和取消一个断点。另外,在编辑状态下,按
Ctrl+B组合键,弹出断点设置对话框。然后单击「Condition…」按钮弹出设置断点条件的对话框进行设置。
7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能
这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:
(1)关闭Project
(2)删除“工程名。ncb”文件
(3)重新打开工程
8.如何将一个通过ClassWizard生成的类彻底删除
首先在工作区的FileView中选中该类的。h和。cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。
9. 如何将在workspace中消失的类找出来
打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。
10. 如何清除所有的断点
菜单「Edit」->「Breakpoints…」,打开“Breakpoints”对话框,单击「Remove All」按钮即可。快捷键是“Ctrl + Shift + F8”。
11. 如何再ClassWizard中选择未列出的信息
打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。
12. 如何检测程序中的括号是否匹配
把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。
13. 如何查看一个宏(或变量、函数)的定义
把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按「确定」按钮,然后就会跳到该宏(或变量、函数)定义的地方。
14. 如何添加Lib文件到当前工程
单击菜单「Project」->「Settings…」弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。
15. 如何快速删除项目下的Debug文件夹中临时文件
在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择「Clean(selection only)」菜单即可。
16. 如何快速生成一个现有工程除了工程名外完全相同的新工程
在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击「OK」按钮。出现“Custom AppWizard”项,输入新工程的名字,单击「OK」按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击「Next」按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击「Finish」按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard.现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下
Common\MSDev98\Template目录中删除该Wizard对应的。awx和。pdb文件。
17. 如何解决Visual C++ 6.0不正确连接的问题
情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。
18. 引起LNK2001的常见错误都有哪些
遇到的LNK2001错误主要为:unresolved external symbol “symbol”,如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。
一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:
<1>由于编码错误导致的LNK2001错误
(1)不相匹配的程序代码或模块定义(。DEF)文件导致LNK2001.例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。
(2)如果使用的内联函数是在。cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。
(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。
(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。
(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。
<2>由于编译和联机的设置而造成的LNK2001错误
(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误
(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。
(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。
(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。
(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。
(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联函数。
(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。
19. 如何调试一个没有源码的exe文件调用的dll
在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。
20. Visual C++ 6.0工程中的项目文件都表示什么
·opt:工程关于开发环境的参数文件。如工具条位置等信息。
·aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。
·clw:ClassWizard信息文件,实际上是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(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。
·pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。
·exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。
·ncb:无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。
第二篇:我的面试经验总结分享
刚刚从张江回来,我的处女张江行就这么在杯具中收场了……不过我还是挺喜欢张江的感觉的(话说SAP居然就在金科地铁站旁边一刚,一回头让我想到某人……囧,两年前我就想来了,现在终于到了)
回到这次面试,唉~~~又是纯属打酱油啊……
本来以及也许我就此可以往技术方向发展了,看来上帝不想让我往这方面发展嘛……over了,以后都不打算往那方面发展了……虽然我其实还是蛮喜欢这个方向的工作的,但是实在基础不扎实啊,而且一时半会也表现不出来我在这方面的天赋嘛,唉……杯具了,manager只看事实的东西嘛,又不是人人都是伯乐的,算了,我还是表折腾自己了,安安稳稳地回去做我的cold call intern吧。
于是,介于这次的面试结束,我的实习求职生活就此告以段落。现在还是乖乖的回去好好复习算了。
其实,是从五月份突然决定重出江湖,又开始找实习了,觉得也许先下手为强吧,早点找的话考完试就可以开始上班了,不浪费时间嘛,毕竟去年这个时候以为暑假找也来得及,就一直拖,然后杯具了,面试了一个暑假才在尾声的时候去了申银万国打杂,于是这次决定早早出手。不过当时是大二嘛也确实难找一点。
其实,这次找工作还算顺利的,简历投出去了大概在20多封吧,接到了不下5-6个面试电话。当然有我不去的,这个是后话。但是上来两个就面试成功搞的我老兴奋的,看来现在RP用完了,后面两个估计没什么希望了。当然也有可能我手上拿着人家的offer,而且任仕达也算是个500强,在人力资源方面数一数二的公司,而且离家很近,对后面的面试就抱有打酱油的态度了。没有太eager 的感觉。
还是说说打酱油的两次面试吧。
第一个是一家美国的全资公司,叫赛科斯,做CRM的……话说我真没投这家公司呀,纯属运气,被猎头在51job上看中了。好吧,那时候手上已经拿着任仕达的offer了,听说是个英文面试,想想英文的还没玩过,于是就决定去那感受感受,就当打酱油了。结果只准备了self-introduction的我就这么没有任何心理负担的跑过去了(其实当时是抱着一些侥幸心理的,想着人家DTT面试都是中文类,你个小技术公司难道会全英文?大不了就是
self-introduction嘛。)结果,去了居然发现还有笔试一刚,上来让我自己YY一个场景写个英文的complaintment letter,然后我当场石化了,好吧,写吧,打酱油嘛,不进又怎样了……然后居然洋洋洒洒写了A4纸一面超过,也不知道自己写了点啥,语句通不通顺,反正气势上够蒙人的。呵呵。然后等了一段时间被HR带去面试,开始还用中文说了两句,然后就来了句please introduce urself.然后我balabala了一堆,那叫一个顺啊,心理还乐呵,被我猜中了吧,结果讲完我就知道情况不妙,HR嘎手继续开英文一刚。我想完了,没准备……于是就e,a了半天,而且因为我面的是HR intern问我为什么选这个,了解多少……其实我当时心想,我哪知道,我这不是来打酱油的嘛……然后就在这么尴尬的情况下瞎掰了几句蹩脚的英文结束了……唉,我的处女笔试和全英文面试就这么被自己玩票了…… 第二家就是今天这家,老哥工作的公司,花旗软件……牛X啊……技术方向的,其实我这在一堆矮子里还算可以的技术哪能上的了台面啊,自己也太自以为是了,什么叫初生牛犊不怕
资料来源:中国教育在线 http://www.eol.cn/
虎说的大概就是我吧。去面试也纯属意外,之前自己一直都不敢投软件方向知道自己不行呀,虽然这次的系统几乎都是自己实现的。但是知道没什么基础的就是混混的。然后听说花旗软件特地来我们学院招人么,我就随便投个玩玩咯,没想到居然被叫去面试了,amen……我的倍受打击的张江行就开始了。老哥开始跟我说他当年面试的时候都没有问技术问题呀,就问问那种应届生上面的传统英文题目么,有了上次那个酱油的全英语面试的经验么,我也算准备了比较充分了嘛,谁知道哦……居然帮我讲HR就不面了,直接面manager就可以了。我囧了,顿时觉得完了……然后果然,被带到了8号楼以后,面试的部门经理上来就开始研究我的成绩单,对着课程就开始问技术问题,完全没准备,脑子一片空白,最基础的都没答上来,于是杯具了……然后只能在那里瞎侃。刚刚想到问的一个问题。字符类型有些什么,我居然只答出来,Int Char float,居然连最常用的string都没想起来,sigh~~~太杯具了,不谈了……结果以为一次就结束了类,没想到一波未平一波又起啊,居然还有一个manager要面,然后战战兢兢的问HR姐姐,是英文吗?我中文技术的都没答上来,英文就更不行类,不过还好ms那幢楼的manager都爱说中文,大概他们跟美国那边打交道比较多,英文说腻了还是用中文的比较爽吧。然后又是一阵瞎聊居然聊了半个多小时,也没具体看时间,不过感觉那个manager明显比刚刚那个要nice很多……不过反正都杯具了,就继续酱油呗。然后也没问太多技术的问题,因为我把它扼杀在了摇篮里,上来就说我技术都忘的差不多了,但是学习能力强上手快。然后就聊了点学校的事情。over……回到报道的19号楼。还是找老哥吧,瞅瞅他们干啥的,coding……一人一台电脑……工作环境很是自由啊,可惜了,我再喜欢也无福享用了。这次面试也直接把我刚刚燃起的技术路线萌芽给浇灭了……好吧,我还是往金融方向发展算了。
over了,over了……
实习面试到此结束了,昨天又拒了一家的面试,不想再打酱油了。回学校好好学习天天向上吧……期末在即,要加油了!!!
PS。上周末在学校累死累活的拼命的把系统给实现了,真是happy啊,不过也给我们组那些打酱油的爽了一把。搞得其他组的人都后悔当年没觉悟要跟我……sigh~~~偶尔BH一下下啦,顶p用啊……不像寝室里某些女人靠这男人就把IBM的实习给搞定了……多爽
啊~~~俺劳碌命啊,累死累活到头来还不是一瓶酱油。算了……我也表太纠结了,好好学习,毕竟还有另外的打算。
加油!加油!加油!
资料来源:中国教育在线 http://www.eol.cn/