上一页 1 2 3 4 5 6 ··· 8 下一页
摘要: 今天编译了一段程序,运行的时候崩溃了,下断点查看了下崩溃的地方,发现问题出在使用传指针方式向线程传递局部变量。问题代码大致如下:void CStrLenCheckDlg::OnOK(){ THREADINFO info; // 局部变量 info.pDlg = this; info.strFileName = m_strFileName; // 以传指针方式传递局部变量 info 给线程函数 AfxBeginThread(ThreadFunc, &info);}UINT ThreadFunc(LPVOID lpParam){ THREADINFO* p... 阅读全文
posted @ 2012-02-03 11:28 Atypiape2 阅读(4558) 评论(0) 推荐(2) 编辑
摘要: 用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLAND TC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现console彩色文本及背景的显示。下面我们就看看VC++如何实现彩色文本。 在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下... 阅读全文
posted @ 2012-01-19 14:11 Atypiape2 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 谈到优化,很多人都会直接想到汇编。难道优化只能在汇编层次吗?当然不是,C++层次一样可以作代码优化,其中有些常常是意想不到的。在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。1 确定浮点型变量和表达式是 float 型为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要特别注意的是,以 "F" 或 "f" 为后缀(比如:3.14f)的浮点常量才是 float 型,否则默认是 double 型。为了避免 float 型参数自动转化为 double,请在函 阅读全文
posted @ 2012-01-19 13:55 Atypiape2 阅读(10662) 评论(0) 推荐(2) 编辑
摘要: 外挂、木马和私服一直网络游戏的三大死敌。一个不小心被任意一个家伙打倒,一款好好的网络游戏就全毁了。 在这里我要讲一下防外挂和防木马的一个通用解决方案,希望能解决大多数的外挂和木马问题。从原理上看,也可以用于防私服,具体是否可行,请大家斟酌。这个方案受到了传奇的反外挂方案的启发,在这里对盛大表达感谢。 该方案包括“两点一线”。其中一个“点”是侦测代码,检查外挂和木马是否存在,有点象个“侦察员”。另一个“点”是攻击代码,可以抓玩家进监狱,也可以通知玩家修改密码,有点象个“狙击手”。一条“线”是指发现外挂或木马的信息要安全的从侦察员传到狙击手那里,有点象“电话线”。下面我分别介绍这“两点一线”的设计 阅读全文
posted @ 2012-01-19 11:30 Atypiape2 阅读(1058) 评论(0) 推荐(0) 编辑
摘要: 遇到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 阅读全文
posted @ 2012-01-19 10:18 Atypiape2 阅读(1684) 评论(0) 推荐(0) 编辑
摘要: 在使用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@ 阅读全文
posted @ 2012-01-18 12:38 Atypiape2 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 在软件行业中,个人觉得每个Coder、Leader(那些当了Leader以后就不需要Code的除外)都应该除了具有良好的编码能力以外,最为主要的就是Debug的能力要坚实。千万不要告诉我Debug工作是Tester和QA的事情,首先你要认识到Debug的能力是一个并不简单的能力,能帮助你提高你的开发能力,加快开发速度,节约开发成本;其次你更应该知道,你所掌握的Debug的能力和技术并不可能抢去Tester或者QA的饭碗,他们做的工作更仔细、全面,更富有创造力。由于本人数年来一直使用VC6,所以下面使用的观点和相关的描述都是从VC出发的,肯定有所偏颇、错误之处,还望各位看官不吝啬地指出,本人定虚 阅读全文
posted @ 2012-01-18 12:21 Atypiape2 阅读(353) 评论(0) 推荐(0) 编辑
摘要: _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+... 阅读全文
posted @ 2012-01-14 18:03 Atypiape2 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 - 面前放本书,一点build按钮,就低头读一会书~~~往事不堪回首。 可以想象,如果不加以重视,编译速度极有可能会成为开发过程中的一个瓶颈。那么,为什么C++它就编译的这么慢呢? 我想最重要的一个原因应该是C++基本的"头文件-源文件"的编译模型: 每个源文件作为一个编译单元,可能会包含上百甚 阅读全文
posted @ 2012-01-13 11:49 Atypiape2 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 问题: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 阅读全文
posted @ 2012-01-11 16:39 Atypiape2 阅读(2272) 评论(0) 推荐(0) 编辑
摘要: 问题:从某DLL中导出一个接口函数GetDirFileIdSet用于获取目录下所有文件的ID集合。函数声明如下,该函数传入一个std::set<UINT>类对象:void GetDirFileIdSet(std::set<UINT>& rFileIdSet);当在VS2008中编译的“数据文件编辑器”加载了在VC6中编译的DLL,并调用到GetDirFileIdSet时发生了崩溃。原因:在不同的DLL或EXE中通过指针或引用操作另一个DLL或EXE中的STL类对象时,会遇到严重的程序错误,包括数据错乱或丢失。标准C++库的多数类直接或间接的使用了静态数据成员。由 阅读全文
posted @ 2012-01-10 09:43 Atypiape2 阅读(1842) 评论(0) 推荐(0) 编辑
摘要: 方法一,使用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; } 阅读全文
posted @ 2012-01-09 18:49 Atypiape2 阅读(594) 评论(3) 推荐(0) 编辑
摘要: FireFox采用Gecko内核,不同于IE内核,不能直接通过HWND像处理IE内核那样获取IHTMLDocument2。幸好Mozilla为Gecko做了一层映射,使得Gecko支持MSAA接口,可以通过HWND间接获得IHTMLDocument2(实际上是ISimpleDOMDocument,和IHTMLDocument2同样继承自IUnknown)。网上有篇文章《基于IE和Gecko内核的网页内容获取与分析研究》,可惜这篇文章中提到的方法只对旧版的FireFox有效。搜了好久都没发现有关新版本的中文资料,许多文章都是针对FireFox3.x,并且不太靠谱。无耐之下只得研究Mozilla官 阅读全文
posted @ 2012-01-09 18:18 Atypiape2 阅读(7005) 评论(3) 推荐(0) 编辑
摘要: 本博文的内容基本取自“微软帮助和支持”上的一篇文章:《How to get IHTMLDocument2 from HWND》,但是里面的代码有个小错误会使获得的IHTMLDocument2无法使用,可能是版本问题,这里先提出修改方法:把代码中的IID_IHTMLDocument改为IID_IHTMLDocument2。注意:该方法只对采用IE内核(Trident)的浏览器有效,包括360安全浏览器、腾讯TT、世界之窗、绿色浏览器等。下面先给出示例代码,对《How to get IHTMLDocument2 from HWND》中的代码除了前面提到的修改,就不再做其他改动了。#include 阅读全文
posted @ 2012-01-09 11:46 Atypiape2 阅读(2676) 评论(0) 推荐(0) 编辑
摘要: 首先解释一下浏览器内核是什么东西。英文叫做:Rendering Engine,中文翻译很多,排版引擎、解释引擎、渲染引擎,现在流行称为浏览器内核,至于为什么流行这么称呼,请自行领悟。Rendering Engine,顾名思义,就是用来渲染网页内容的,将网页的代码转换为最终你看得见的页面。因为是排版,所以肯定会排版错位等问题。为什么会排版错位呢?有的是由于网站本身编写不规范,有的是由于浏览器本身的渲染不标准。现在有几个主流的排版引擎,因为这些排版引擎都有其代表的浏览器,所以常常会把排版引擎的名称和浏览器的名称混用,比如常的说IE内核、Chrome内核。其实这样子是不太合理的,因为一个完整的浏览器 阅读全文
posted @ 2012-01-09 11:16 Atypiape2 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 上次拿到了一个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 阅读全文
posted @ 2011-12-28 16:23 Atypiape2 阅读(1593) 评论(0) 推荐(0) 编辑
摘要: D3D设备初始化以后,双精度浮点运算的结果出现了不同。 在FPU中,存在着三种运算精度:single precision(24bits),double precision(53bits),double extended precision(64bits)。而默认精度是53bits的double precision,也就是双精度浮点。D3D出于性能考虑,会将fpu的计算精度改为单精度。因为fpu线程相关的特性,渲染线程中所有的浮点运算都会保持与D3D一致。这种转变体现在fpu的控制寄存器(CTRL)的变化上,CTRL寄存器的值从007F变成027F。 RC字段,这个字段控制浮点转整型的转换方式, 阅读全文
posted @ 2011-12-13 09:11 Atypiape2 阅读(4424) 评论(0) 推荐(0) 编辑
摘要: 用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 阅读全文
posted @ 2011-11-16 14:55 Atypiape2 阅读(2194) 评论(0) 推荐(0) 编辑
摘要: 公司以前的项目中有的是用fscanf来读取INI文件,这会产生不少问题,键名部分重合便是一个不常出现,但可能出现的问题。这里指的键名部分重合是指在同一节(Section)中,键名间出现类似如下情况:NameAltitude=100Sort=10NameOffsetY=20以上3个字段均是可选项,其中NameAltitude和NameOffsetY的第一个单词出现了重合。NameOffsetY是后来功能需要再添加上去。使用fscanf读取INI文件数据相关代码如下:bool bSucRead = true;// ...// ...// ...// 读取必选键值-BeginbSucRead &am 阅读全文
posted @ 2011-11-12 16:50 Atypiape2 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 在DLL封装的时候,一般都会采用接口类(Interface Class),即纯虚类,达到接口与实现分离的目的。但采用接口类,只能通过返回指针或引用来间接使用被封装的类。相对于这一点,采用句柄类(Handle Class)是个不错的替代方案。句柄类除了名称外,在使用方式上基本同被封装的类无差别。句柄类易用性是建立在耗费一定运行效率的基础之上的(当然,接口类也会消耗一定的运行效率),因此它一般用在运行效率要求不是很高的场合。另外,由于句柄类的编码量比接口类多,所以一般用来封装改动比较小的类。在适当的场景下,使用句柄类是种不错的选择,并且它也能用来封装继承体系,下面是使用句柄类封装继承体系的例子。有 阅读全文
posted @ 2011-10-13 20:26 Atypiape2 阅读(905) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 8 下一页