摘要: 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩溃的,也可以做额外的操作,但是这样是没办法把默认的发送错误的对话框去掉的。然后又有人说是不是采用了类似钩子的方法把这个东西在哪里勾掉了。最后网上查了一番,发现SetUnhandledExceptionFilter这个函数解决了一切。总结了下搜到的资料,这个函数的返回值有三种情况:EXCEPTIO 阅读全文
posted @ 2011-10-09 12:14 Atypiape 阅读(22196) 评论(4) 推荐(0) 编辑
摘要: Bruce Eckel(Thinking in Java/C++作者) 在他的 5%的神话 (Mythical 5%) 中提到:5%的程序员开发效率是其他95%程序员的20倍 (5% of programmers are 20x more productive than the other 95%)按照80-20法则,80%的程序员几乎不看书,不读Blog,不参加技术会议,不持续学习。这些人也可能会进入大公司,他们日复一日的做着重复的 工作。另外20%则在专业方面比较主动,他们喜欢阅读,喜欢学习,喜欢参加技术活动。这20%当中又会有80%的人可能不会特别成功,他们仍然走在通往成 功的路上奋斗。 阅读全文
posted @ 2011-10-07 22:09 Atypiape 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 作为一个程序员,每天做的最多的一件事情,那必定是编码了,这是我们吃饭的资本,是老板发给我们工钱的理由。而一个有效率的程序员,必定能够快速的进入编码状态,用最高的效率完成自己的工作,并且能在闲暇之余,对自己的知识体系进行查缺补漏,不断完善,逐步提高自己的技术实力,最终成为一名优秀的乃至杰出的程序员。想成为一名杰出的程序员,唯一的途径就是学习、思考、实践,三者缺一不可,但这三者都是需要一个良好的环境才能高效的进行,设想一下,如果处在一个噪音环绕,干扰不断的环境中设计复杂的算法,大多数人一定会崩溃的!当然,不是每个人都要去设计复杂的算法,大部分人工作的环境也没有变态到噪音环绕、干扰不断,但是周围人的 阅读全文
posted @ 2011-10-07 16:31 Atypiape 阅读(2126) 评论(0) 推荐(3) 编辑
摘要: 本文写给那些认为在项目上所花时间和效率成正比的程序员。我要说的是,事实并非如此。虽然你需要在电脑前敲键盘输入东西,但这只和编程沾上一点边。那么,程序员该如何利用时间呢? 俗话说,磨刀不误砍柴工,拿出一部分时间提升自己的技能,可以提高工作效率。你可以参考以下几条建议: 1. 编写单元测试,提高效率(如果你还没有这样做) 这是一个十分基础的工作,但是许多程序员并没这么做。但你应该这么做。这样做不仅能够提高代码质量,还能提高工作效率。你不但能够在发布和修改你的程序时更加自信,而且还节省了相当多的时间。 试想一下,如果你正编写一个大型网络应用程序,其中一个小小的代码出现了差错,要修改它便意... 阅读全文
posted @ 2011-10-07 15:50 Atypiape 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 工作效率对自由职业者而言非常重要,因为你完成的工作直接和你的收入相关。 如果可以在更短的时间内做更多的事,你就能承接更多的工作。同时,也就有更多的时间去陪家人、结识朋友或发展个人的爱好。 高效率对自由职业者还意味着你可以在为当前客户工作的同时,不断地拓展业务。此外,你也有更多的时间来不断地学习、提高技能或学习新的东西。 在这篇文章中,笔者和大家分享自由职业者如何让工作高效的10种方式: 1 整理好你的工作环境 从实用层面来看,一个整洁、摆放好的物理环境意味着找东西非常方便。不必浪费很多宝贵的时间去找一份急需要的资料。 从另外一个层面来看,工作的环境会影响到我们的思维。如果工作的... 阅读全文
posted @ 2011-10-07 15:48 Atypiape 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 第一步:开始->运行->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"代表左边线离左边编 阅读全文
posted @ 2011-08-31 09:14 Atypiape 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 很多时候程序的 Debug 版本运行没有任何问题,但是一旦发布 Release 版本后,运行就出错,着实让人郁闷。大家知道,VC++ 中 Release 版本是对无法对源代码进行调试的。一般的做法是在怀疑有错误的代码前后插入MessageBox 函数,在函数中显示可能导致错误的变量的值。或者插入写文件的语句,输出可能导致错误的变量的值到一个记录文件。其实,除了上面讲的这个办法之外,还有其它的途径来调试 Release 版本的。下面就结合自己的经验和网上查找的一些资料给出调试 Release 版本的两个方法:方法一、利用 *.PDB 符号文件调试 Release 版本在 VCKBASE 的在线杂 阅读全文
posted @ 2011-08-21 13:02 Atypiape 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 1 案例描述作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭。请与您的供应商联系。呵呵,这句微软的“名言”,恐怕是程序员最怕见也最常见的东西了。在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正。本文描述了自己总结的几种定位崩溃的办法。2 案例分析以下是几种常见的崩溃现象及对应的处理办法:1. 对于Release版本必现的崩溃且在Debug版本上也崩溃的 阅读全文
posted @ 2011-08-19 10:44 Atypiape 阅读(6289) 评论(1) 推荐(0) 编辑
摘要: 编辑器加载中... C++提供了内联函数,目的是为了提高函数的执行效率。内联函数在函数声明前面加上关键字inline 就可以了 如:inline int FunctionOne(int x); 在VC++中可使用另一关键字_forceinline 代替inline 关键字.这个关键字将命令编译器跳过一般的ROI 分析(Return On Investment --一种编程缩略语),将所对应的代码强行内联.在有写时候,编译器会拒绝将一个函数内联,使用这个关键字,用户只得到一个编译警告,就可强行内联. 在使用内联函数时,是由编译器决定它们是按普通函数处理还是将调用函数部分用实际的函数体代码替换。不 阅读全文
posted @ 2011-08-19 10:07 Atypiape 阅读(6451) 评论(0) 推荐(1) 编辑
摘要: 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern c 阅读全文
posted @ 2011-08-16 11:15 Atypiape 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 要编译成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 阅读全文
posted @ 2011-08-16 08:48 Atypiape 阅读(1188) 评论(0) 推荐(0) 编辑
摘要: 一般我们在全局作用域定义全局变量来进行模块间(函数之间、类之间)的数据交互。可是在Lib里干这种事情得当心了,如果这个Lib被两个或两个以上的DLL(包括EXE)链接,并且他们都调用了Lib中同一个全局变量,那么灾难很可能发生了。因为对于DLL而言,链接Lib只是得到了Lib的一份拷贝,也就是说,每个DLL中得到的Lib的拷贝都是独立的,相互之间无联系的。因此,这个“同一个”全局变量,其实在每个DLL中都已经单独存在了,已经不是唯一的“同一个”,而是每个DLL各有一个。所以,这些DLL是不能通过Lib中的全局变量进行数据交互的,他们各不相干。 阅读全文
posted @ 2011-08-15 16:33 Atypiape 阅读(1161) 评论(0) 推荐(0) 编辑
摘要: 今天将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 阅读全文
posted @ 2011-08-13 16:41 Atypiape 阅读(2771) 评论(0) 推荐(0) 编辑
摘要: 确定编译器分配的用于构造预编译头的内存量。/Zmfactor参数factor一个比例因子,确定编译器用于构造预编译头的内存量。 factor 参数是编译器定义的工作缓冲区的默认大小所占的百分比。 factor 参数的默认值是 100 (%),但您可以指定更大或更小的数量。备注在早期版本的 Visual C++ 中,编译器使用几个离散堆,每个堆都有一定的限制。 当前,编译器可根据需要动态增加堆,最多可增加到总堆大小限制,并且只需要固定大小的缓冲区即可构造预编译头。 因此,很少需要 /Zm 编译器选项。如果在您使用 /Zm 编译器选项时,编译器用完堆空间,发出 C1060 错误消息,则您可能保留了 阅读全文
posted @ 2011-08-13 15:43 Atypiape 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 参考:这个错误是微软设计错误,因此如果遇到这个错误,我们只能躲过这个链接错误。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。MS,C有两种C函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误。因此建议使用支持多线程的msvcrt.lib。需要注意的是,当使用其他的库的时候最容易产生这种错误,例如boost和wxWindow使用/MD来编译的,也就是使用支持多线程的C函数库。这时候如果自己的程序没有指明/MD的话,就会提示两种C函数冲 阅读全文
posted @ 2011-08-13 15:40 Atypiape 阅读(1552) 评论(0) 推荐(0) 编辑
摘要: 一、接口的定义 有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。(不想做过多说明,大家一看就应该能够明白)Class IPerson{public: IPerson() {}; virtual ~IPerson()=0 {}; //注意,最好定义此虚析构函数,够避免子类不能正常调用析构函数;如果定义为纯虚析构函数,则必须带定义体,因为子类隐含调用该析构函数。 阅读全文
posted @ 2011-08-01 20:37 Atypiape 阅读(935) 评论(0) 推荐(0) 编辑
摘要: 第一步, 在桌面上点击鼠标右键,依次点击“属性”、“外观”、“高级”按钮。第二步, 在打开的“高级”对话框中,在“项目”下拉列表里选择“窗口”。第三步, 再打开右边对应的“颜色”列表,选择其中的“其他”一项,在打开的对话框里,把“色调”的参数设置为85,把“饱和度”参数设置为90,把“亮度”参数设置为205。再点击“确定”退出设置。第四步,打开ie浏览器,选择“工具”栏中的“internet选项”,点击“辅助功能”按钮,在“不使用网页中指定的颜色”前打钩。 阅读全文
posted @ 2011-07-31 15:03 Atypiape 阅读(1721) 评论(0) 推荐(0) 编辑
摘要: 链接的时候分静态链接和动态链接两种。静态连接的话,基本上就不需要向目标机器拷贝附加的文件了,方法如下: 1、修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就 不再需要VC的dll了。 2、工程->属性->配置属性->常规->MFC的使用,选择“在静态库中使用mfc”。动态连接的话,需要在目标机器上拷贝mfc所依赖的动态库。根据你使用的VC版本不同而不同: VC6的话,一般包括mfc42.dll、msvcrt.dll、msvcp60.dll; VC71的话,一般需要MFC71.dll、msvcp71.dll、msv 阅读全文
posted @ 2011-07-29 15:06 Atypiape 阅读(3079) 评论(0) 推荐(2) 编辑
摘要: 编辑器加载中...链接警告 LNK4098defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library你试图链接相互不兼容的库。重要提示目前运行时库包含预编译指令来阻止混合不同类型库的链接。如果你试图在同一个程序中使用不同类型的或者调试/非调试版本的运行时库,你将看到这个警告。举个例子,如果你编译一个文件使用某个类型的运行时库,而别的文件使用另外一个类型(例,单线程版本和多线程版本),那么在你试图链接它们的时候,你将看到这个警告。你应该使用相同的运行时库来编译所有的源文件。参 阅读全文
posted @ 2011-07-29 09:35 Atypiape 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 基础:1、C++ Program Language2、C++ Primer 以及习题3、设计模式4、Effect C++和More Effect C++5、C++编程技巧方面的书籍6、Debug技巧7.算法导论4.较好的英文阅读能力客户端:1.精通计算机图形学,熟悉DirectX开发2.熟悉Ogre3d3.熟悉Python/Lua者4.熟悉SSE/SSE2优化技巧5、Beginning C++ Game Programming (Premier.Press,2004)6、Game Architecture and Design (New Riders, 2004)7、Realtime Rend 阅读全文
posted @ 2011-07-28 13:22 Atypiape 阅读(325) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示