01 2012 档案
摘要:用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLAND TC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现console彩色文本及背景的显示。下面我们就看看VC++如何实现彩色文本。 在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下...
阅读全文
摘要:谈到优化,很多人都会直接想到汇编。难道优化只能在汇编层次吗?当然不是,C++层次一样可以作代码优化,其中有些常常是意想不到的。在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。1 确定浮点型变量和表达式是 float 型为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要特别注意的是,以 "F" 或 "f" 为后缀(比如:3.14f)的浮点常量才是 float 型,否则默认是 double 型。为了避免 float 型参数自动转化为 double,请在函
阅读全文
摘要:外挂、木马和私服一直网络游戏的三大死敌。一个不小心被任意一个家伙打倒,一款好好的网络游戏就全毁了。 在这里我要讲一下防外挂和防木马的一个通用解决方案,希望能解决大多数的外挂和木马问题。从原理上看,也可以用于防私服,具体是否可行,请大家斟酌。这个方案受到了传奇的反外挂方案的启发,在这里对盛大表达感谢。 该方案包括“两点一线”。其中一个“点”是侦测代码,检查外挂和木马是否存在,有点象个“侦察员”。另一个“点”是攻击代码,可以抓玩家进监狱,也可以通知玩家修改密码,有点象个“狙击手”。一条“线”是指发现外挂或木马的信息要安全的从侦察员传到狙击手那里,有点象“电话线”。下面我分别介绍这“两点一线”的设计
阅读全文
摘要:遇到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@
阅读全文
摘要:在软件行业中,个人觉得每个Coder、Leader(那些当了Leader以后就不需要Code的除外)都应该除了具有良好的编码能力以外,最为主要的就是Debug的能力要坚实。千万不要告诉我Debug工作是Tester和QA的事情,首先你要认识到Debug的能力是一个并不简单的能力,能帮助你提高你的开发能力,加快开发速度,节约开发成本;其次你更应该知道,你所掌握的Debug的能力和技术并不可能抢去Tester或者QA的饭碗,他们做的工作更仔细、全面,更富有创造力。由于本人数年来一直使用VC6,所以下面使用的观点和相关的描述都是从VC出发的,肯定有所偏颇、错误之处,还望各位看官不吝啬地指出,本人定虚
阅读全文
摘要:_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
阅读全文
摘要:问题:从某DLL中导出一个接口函数GetDirFileIdSet用于获取目录下所有文件的ID集合。函数声明如下,该函数传入一个std::set<UINT>类对象:void GetDirFileIdSet(std::set<UINT>& rFileIdSet);当在VS2008中编译的“数据文件编辑器”加载了在VC6中编译的DLL,并调用到GetDirFileIdSet时发生了崩溃。原因:在不同的DLL或EXE中通过指针或引用操作另一个DLL或EXE中的STL类对象时,会遇到严重的程序错误,包括数据错乱或丢失。标准C++库的多数类直接或间接的使用了静态数据成员。由
阅读全文
摘要:方法一,使用ConvertBSTRToString。例如: #include #pragma comment(lib, "comsupp.lib") int _tmain(int argc, _TCHAR* argv[]){ BSTR bstrText = ::SysAllocString(L"Test"); char* lpszText2 = _com_util::ConvertBSTRToString(bstrText); SysFreeString(bstrText); // 用完释放 delete[] lpszText2; return 0; }
阅读全文
摘要:FireFox采用Gecko内核,不同于IE内核,不能直接通过HWND像处理IE内核那样获取IHTMLDocument2。幸好Mozilla为Gecko做了一层映射,使得Gecko支持MSAA接口,可以通过HWND间接获得IHTMLDocument2(实际上是ISimpleDOMDocument,和IHTMLDocument2同样继承自IUnknown)。网上有篇文章《基于IE和Gecko内核的网页内容获取与分析研究》,可惜这篇文章中提到的方法只对旧版的FireFox有效。搜了好久都没发现有关新版本的中文资料,许多文章都是针对FireFox3.x,并且不太靠谱。无耐之下只得研究Mozilla官
阅读全文
摘要:本博文的内容基本取自“微软帮助和支持”上的一篇文章:《How to get IHTMLDocument2 from HWND》,但是里面的代码有个小错误会使获得的IHTMLDocument2无法使用,可能是版本问题,这里先提出修改方法:把代码中的IID_IHTMLDocument改为IID_IHTMLDocument2。注意:该方法只对采用IE内核(Trident)的浏览器有效,包括360安全浏览器、腾讯TT、世界之窗、绿色浏览器等。下面先给出示例代码,对《How to get IHTMLDocument2 from HWND》中的代码除了前面提到的修改,就不再做其他改动了。#include
阅读全文
摘要:首先解释一下浏览器内核是什么东西。英文叫做:Rendering Engine,中文翻译很多,排版引擎、解释引擎、渲染引擎,现在流行称为浏览器内核,至于为什么流行这么称呼,请自行领悟。Rendering Engine,顾名思义,就是用来渲染网页内容的,将网页的代码转换为最终你看得见的页面。因为是排版,所以肯定会排版错位等问题。为什么会排版错位呢?有的是由于网站本身编写不规范,有的是由于浏览器本身的渲染不标准。现在有几个主流的排版引擎,因为这些排版引擎都有其代表的浏览器,所以常常会把排版引擎的名称和浏览器的名称混用,比如常的说IE内核、Chrome内核。其实这样子是不太合理的,因为一个完整的浏览器
阅读全文