随笔分类 - Viusal C++
与VC集成开发环境相关的内容
摘要:默认情况下,如果嵌入本地Web页面,并在页面内部使用iframe来显示一个在线页面,加载的过程中会触发一个未捕获异常,虚函数CefV8ContextHandler::OnUncaughtException被调用,如果搞个控制台窗口来输出异常消息,或者将消息打印到日志中,会是这样:Unsafe Jav...
阅读全文
摘要:在C++编程中,成员函数指针并不常用,并且由于它实现比较复杂,很容易导致编程错误。基本用法:classB{public:intf(inta,intb){return(a+b)*m_c;}intm_c;};intmain(){typedefint(B::*MEM_FUNC)(int,int);//定义成员函数指针类型MEM_FUNCMEM_FUNCpmf;//定义成员函数指针pmfpmf=NULL;//指针可以设置为NULLpmf=&B::f;//指针可以指向一个成员函数Bb1,b2;b1.m_c=10;b2.m_c=20;inti1=(b1.*pmf)(30,40);//调用b1.f(
阅读全文
摘要:vs本身就有语法高量功能,再加上va的加强,应该说对于代码正文程序结构脉络已经很清晰了!但你是否有这样的困扰,当处理一个比较大的项目的时候,常常会在冗长的代码里迷失方向!刚刚修改哪了,断点跑哪里去了。。。你说可以加标签,但这个标签是针对一个解决方案的,有些时候标签一多,都不知道哪个对应哪个了~所以标签我多用来在不同的源文件中跳转!而我们需要的是一个能标记当前编辑源码的~ 今天无意中在网上看到了metalscroll,感觉正好满足了我的需求~好东西也要推荐给大家! metalscroll是个很轻量级的VS插件(比RockScroll更强大),它把Visual Studio 中代码编辑器右边的滚.
阅读全文
摘要:捕获数学函数异常假如我们要用一个数学函数,比如反正弦函数asin(x),如果变元x的值是由用户提供或某个中间结果,则在调用时必须判断其取值范围是合理,是否满|x|<=1?即if(fabs(x)<=1) y=asin(x);else y=…对数函数也可作类似的处理。但是如果遇到幂函数pow(x,y)时,问题就不那么简单了。仔细分析将发现: YX负小数负整数0整数小数负小数无意义有意义有意义有意义无意义负整数无意义有意义有意义有意义无意义0无意义无意义有意义有意义有意义整数有意义有意义有意义有意义有意义小数有意义有意义有意义有意义有意义例如:pow(-1.2,-1.2)=-1.#IND
阅读全文
摘要:遇到VC无法设断点的时候,可以尝试如下3种方法:1、直接在菜单Build里面执行Rebuild All,一般能解决问题。2、在项目属性中,C∕C++的General,将debug info设置为Program Databse for Ddit& Continue ;删除所有的断点,重新下断点。3、对于VS2008可以尝试:Tools->Option->debugging->General 右边找到Require source files to exactly match the original version 把前面的勾去掉。4、对于VS2008上将LIB改造成DL
阅读全文
摘要:在使用std::vector的过程中,编译器报了如下的warning:c:/program files/vc98/include/vector(61) : warning C4786: '??0?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAE@PBV?$basic_string@DU?$char_traits@D@std@
阅读全文
摘要:_MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值 MS VC++ 10.0 _MSC_VER = 1600 MS VC++ 9.0 _MSC_VER = 1500 MS VC++ 8.0 _MSC_VER = 1400 MS VC++ 7.1 _MSC_VER = 1310 MS VC++ 7.0 _MSC_VER = 1300 MS VC++ 6.0 _MSC_VER = 1200 MS VC++ 5.0 _MSC_VER = 1100 其中MS VC++ 10.0就是Visual C++ 2010,MS VC++ 9.0就是Visual C+...
阅读全文
摘要:使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 - 面前放本书,一点build按钮,就低头读一会书~~~往事不堪回首。 可以想象,如果不加以重视,编译速度极有可能会成为开发过程中的一个瓶颈。那么,为什么C++它就编译的这么慢呢? 我想最重要的一个原因应该是C++基本的"头文件-源文件"的编译模型: 每个源文件作为一个编译单元,可能会包含上百甚
阅读全文
摘要:问题:mfcs90d.lib(xxx.obj) : error LNK2005: DllMain@12 already defined in MSVCRTD.lib(xxx.obj)原因:mfcs90d.lib和MSVCRTD.lib的链接顺序不正确。解决方法:项目属性->配置属性->连接器->输入1.在忽略特定库里加入 mfcs90d.lib;MSVCRTD.lib2.在附加依赖库项里加入 mfcs90d.lib MSVCRTD.lib 3.OK
阅读全文
摘要:上次拿到了一个vs2008的编译的Release程序,结果本地打开以后提示“应用程序配置不正确,程序无法启动”,可是我本地 1. 安装了vs2008 2. 打了sp1补丁 3. 安装了 vcredist.exe(Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) 4. 安装了SP1 ATL 安全更新 (KB973675) 依然不起效果,网上搜了下,说是manifest不匹配 之后直接文本方式打开exe,在其中搜索Microsoft,看到这个可执行程序的manifest信息 .... name="Microsoft.V
阅读全文
摘要:用VS2010建了一个默认的C++应用程序,编译后出现如下错误。1>------ 已启动生成: 项目: Test, 配置: Debug Win32 ------1> stdafx.cpp1>c:/program files/microsoft sdks/windows/v7.0a/include/objidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”1>c:/program files/microsoft sdks/windows/v7.0a/include/objidl.h(11281): err
阅读全文
摘要:第一步:开始->运行->regedit第二步:依次打开[HKEY_CURRENT_USER]\Software\Microsoft\VisualStudio\9.0\TextEditor 第三步:在右侧单击鼠标右键新建字符串值"Guides"(不包括双引号)第四步:选中刚才新建的字符串,单击右键修改,数值数据输入"RGB(255,0,0) 5, 80"(不包括双引号);其中"RGB(255,0,0) 5, 80"中"RGB(255,0,0)"的代表边界线颜色,"5"代表左边线离左边编
阅读全文
摘要:很多时候程序的 Debug 版本运行没有任何问题,但是一旦发布 Release 版本后,运行就出错,着实让人郁闷。大家知道,VC++ 中 Release 版本是对无法对源代码进行调试的。一般的做法是在怀疑有错误的代码前后插入MessageBox 函数,在函数中显示可能导致错误的变量的值。或者插入写文件的语句,输出可能导致错误的变量的值到一个记录文件。其实,除了上面讲的这个办法之外,还有其它的途径来调试 Release 版本的。下面就结合自己的经验和网上查找的一些资料给出调试 Release 版本的两个方法:方法一、利用 *.PDB 符号文件调试 Release 版本在 VCKBASE 的在线杂
阅读全文
摘要:1 案例描述作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭。请与您的供应商联系。呵呵,这句微软的“名言”,恐怕是程序员最怕见也最常见的东西了。在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正。本文描述了自己总结的几种定位崩溃的办法。2 案例分析以下是几种常见的崩溃现象及对应的处理办法:1. 对于Release版本必现的崩溃且在Debug版本上也崩溃的
阅读全文
摘要:编辑器加载中... C++提供了内联函数,目的是为了提高函数的执行效率。内联函数在函数声明前面加上关键字inline 就可以了 如:inline int FunctionOne(int x); 在VC++中可使用另一关键字_forceinline 代替inline 关键字.这个关键字将命令编译器跳过一般的ROI 分析(Return On Investment --一种编程缩略语),将所对应的代码强行内联.在有写时候,编译器会拒绝将一个函数内联,使用这个关键字,用户只得到一个编译警告,就可强行内联. 在使用内联函数时,是由编译器决定它们是按普通函数处理还是将调用函数部分用实际的函数体代码替换。不
阅读全文
摘要:1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern c
阅读全文
摘要:要编译成DLL,就要声明和实现分开。首先文件组织是这样的(为了简化,没有加上编译成DLL的语句)在 T.h 中(声明模板函数)template<typename T>T Max(T& t1,T& t2);在 T.cpp 中(模板函数的实现)#include"T.h"template<typename T>T Max(T& t1,T& t2){ return t1>t2?t1:t2;}编译 T.cpp 很好,通过编译在 Main.cpp 中(用于测试的)#include<iostream>using n
阅读全文
摘要:一般我们在全局作用域定义全局变量来进行模块间(函数之间、类之间)的数据交互。可是在Lib里干这种事情得当心了,如果这个Lib被两个或两个以上的DLL(包括EXE)链接,并且他们都调用了Lib中同一个全局变量,那么灾难很可能发生了。因为对于DLL而言,链接Lib只是得到了Lib的一份拷贝,也就是说,每个DLL中得到的Lib的拷贝都是独立的,相互之间无联系的。因此,这个“同一个”全局变量,其实在每个DLL中都已经单独存在了,已经不是唯一的“同一个”,而是每个DLL各有一个。所以,这些DLL是不能通过Lib中的全局变量进行数据交互的,他们各不相干。
阅读全文
摘要:今天将VC2008中的解决方案转到VC6中进行编译,由于解决方案太大,采用IncrediBuild进行联合编译。在编译一个使用了预编译头的项目时,出现了多条类似如下错误:error C2858: command-line option 'program database name (/Fde:\Project\MY\中文\debug\gameclinet_ib_1.pdb)' inconsistent with precompiled header, which used '/Fde:\Project\MY\中文\debug\gameclinet.pdb' Ga
阅读全文
摘要:确定编译器分配的用于构造预编译头的内存量。/Zmfactor参数factor一个比例因子,确定编译器用于构造预编译头的内存量。 factor 参数是编译器定义的工作缓冲区的默认大小所占的百分比。 factor 参数的默认值是 100 (%),但您可以指定更大或更小的数量。备注在早期版本的 Visual C++ 中,编译器使用几个离散堆,每个堆都有一定的限制。 当前,编译器可根据需要动态增加堆,最多可增加到总堆大小限制,并且只需要固定大小的缓冲区即可构造预编译头。 因此,很少需要 /Zm 编译器选项。如果在您使用 /Zm 编译器选项时,编译器用完堆空间,发出 C1060 错误消息,则您可能保留了
阅读全文