厚积薄发
海纳百川,有容乃大
摘要: 看到ATL中有3个类的代码比较比较重复,在atlbase.h中,分别是CAutoVectorPtr,CAutoPtr和CAutoStackPtr,他们的功能其实很类似STL中的autoptr, 但是这里因为针对不同的分配对象而用了3个不同的类,其中CAutoVectorPtr是针对数组类型的,CAutoPtr是针对普通的非数组类型,而CAutoStackPtr针对的是_malloca分配的类型,因为最后释放方式的不同,它这里用了3份代码来实现。CAutoVectorPtr:template<typenameT>classCAutoVectorPtr{public:CAutoVect 阅读全文
posted @ 2012-09-24 23:10 Richard Wei 阅读(1594) 评论(5) 推荐(0) 编辑
摘要: 总之,拿着一把刀,庖丁解牛般的剖析语言背后的实现细节,看起来不是那么实用,但是它能让你对语言的理解更深刻。实际上ATL中大量应用上面的技术,如果没有对C++ 对象模型有比较深刻的理解,是很难深入下去的。 阅读全文
posted @ 2012-09-21 23:08 Richard Wei 阅读(2826) 评论(3) 推荐(4) 编辑
摘要: 通过上面的分析,我们验证了平时C++书上关于各种类型变量存储区域的假设,简单来说就是全局变量和静态变量会被编译到可执行文件的数据节(分只读和可读写)中, 非静态的局部变量则分配在堆栈(stack)上,而new(malloc)出来的内存则分配在堆(heap)上。 阅读全文
posted @ 2012-09-20 22:02 Richard Wei 阅读(1726) 评论(5) 推荐(1) 编辑
摘要: 通过上面的介绍,相信大家对程序内存有了比较全局的理解,以后大家分析问题,遇到一个地址,首先要判断这个地址分布在哪里: 如果是Image上,那么是在哪个模块中,这个地址是属于该模块的代码段(.text)还是数据段(.data),如果是代码段,又是属于哪个函数? 如果是Heap上,那么究竟是在哪个堆里面,是我们new出来的吗,是在什么时候new的(new时堆栈状况)? 如果是在Stack上,那么究竟是属于哪个线程的堆栈,当时线程的堆栈是怎么样? 总之,程序在内存中运行,只有你真正理解了内存,你才能真正懂计算机。 阅读全文
posted @ 2012-09-19 23:30 Richard Wei 阅读(2854) 评论(6) 推荐(8) 编辑
摘要: 从上面的例子我们可以看到,对于可变参数的函数,有2种东西需要确定,一是可变参数的数量, 二是可变参数的类型,上面的例子中,参数数量我们是在第一个参数指定的,参数类型我们是自己约定的。这种方式在实际使用中显然是不方便,于是我们就有了_vsprintf, 我们根据一个格式化字符串的来表示可变参数的类型和数量,比如C教程中入门就要学习printf, sprintf等。 总的来说可变参数给我们提供了很高的灵活性和方便性,但是也给会造成不确定性,降低我们程序的安全性,很多时候可变参数数量或类型不匹配,就会造成一些不容察觉的问题,只有更好的理解它背后的原理,我们才能更好的驾驭它。 阅读全文
posted @ 2012-09-18 00:29 Richard Wei 阅读(9865) 评论(1) 推荐(7) 编辑
摘要: 当然,上面几种DLL对外暴露接口的方式本质上没有区别,都是利用PE文件的导出节来导出数据和函数,但是根据它们使用方式的不同,对外部模块来说还是有很大的区别,我们的推荐次序依次是:COM方式->导出API函数方式->导出类方式。 阅读全文
posted @ 2012-08-29 19:04 Richard Wei 阅读(7356) 评论(0) 推荐(1) 编辑
摘要: 最后简单比较下上面3种实现回调的方法: 第一种Callback的方法是面向过程的,使用简单而且灵活,正如C语言本身。 第二种Sink的方法是面向对象的,在C++里使用较多, 可以在一个Sink里封装一组回调接口,适用于一系列比较固定的回调事件。 第三种Delegate的方法也是面向对象的,和Sink封装一组接口不同,Delegate的封装是以函数为单位,粒度比Sink更小更灵活。 阅读全文
posted @ 2012-08-28 12:43 Richard Wei 阅读(9975) 评论(9) 推荐(6) 编辑
摘要: 摘要: 在网上关于窗口视觉效果,有2个问题被问得最多:第一个是如何让窗口边框有阴影效果?第二个是如何让窗口控件有半透明效果?阅读全文Richard Wei 2012-08-23 00:38 发表评论 阅读全文
posted @ 2012-08-23 00:38 Richard Wei 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 摘要: 总的来说DirectUI是趋势,而微软的WPF代表了DirectUI最先进的技术方向,换肤对于DirectUI来说非常容易。随着Win7,Win8 的普及,传统界面库的市场会越来越小,一来因为系统本身已经很炫了,二来微软自己的WPF和Xaml技术基本上已经可以实现任何想要的效果。当然只要XP不消亡,传统的界面库还是有自己的一席之地。阅读全文Richard Wei 2012-08-21 22:33 发表评论 阅读全文
posted @ 2012-08-21 22:33 Richard Wei 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 摘要: 主要特性:(1)软件小而高效,使用流畅,设计人性化(2)支持截图区域的手工选择和根据窗口自动识别选择(3)支持矩形,圆形,直线,箭头,画笔,文本等注释工具(4)支持橡皮擦除功能(5)无限次数的撤销和重做(6)支持鼠标光标的截取(7)支持鼠标区域跟踪和放大(8)支持各种图像文件格式的保存和编辑(9)支持多显示器(10)支持换肤和多语言阅读全文Richard Wei 2012-08-21 00:02 发表评论 阅读全文
posted @ 2012-08-21 00:02 Richard Wei 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 摘要: 做为一名Windows平台上的C/C++开发人员,我们有N个理由学习WinDbg的使用: 有些Bug只有在客户和QA的机器上才能重现,我们不可能在他们的机器上装一个VC吧WinDbg可以让我们方便的保存和分析Dump文件WinDbg的调试功能比VC强大的多,比如它有强大的API断点和条件断点调试内核和驱动,我们只能用WinDbg用WinDbg可以让你更深入的理解系统,理解计算机,用VC你看到的是自己的代码,用WinDbg你看到的是整个进程......最重要的,微软用WinDbg开发和调试Windows操作系统,它是Windows平台上最重要的调试工具.阅读全文Richard Wei . 阅读全文
posted @ 2012-08-15 14:12 Richard Wei 阅读(456) 评论(1) 推荐(0) 编辑
摘要: 摘要: 经常有初学者询问如何学习Windows编程?很多人从MFC开始学习,结果常常是一头雾水,知难而退;也有人毅力坚强,熬过了MFC的阵痛期,最后却是知其然而不知其所以然,并且思维被限制在MFC的框架之中,遇到稍微有点规模的程序就无从下手了。阅读全文Richard Wei 2012-08-15 13:37 发表评论 阅读全文
posted @ 2012-08-15 13:37 Richard Wei 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 摘要: 那么Windbg分析Dump时,会如何推理堆栈过程呢?如果每个函数都是有标准的push ebp, 那么按照ebp递推就可以了;否这就只能用其他方法分析,比如看看堆栈里某个地址是不是函数返回地址(该地址属于某个模块的代码段),这样就可以确定该地址是某个函数堆栈桢的起始地址。阅读全文Richard Wei 2012-07-20 14:00 发表评论 阅读全文
posted @ 2012-07-20 14:00 Richard Wei 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 摘要: 今天遇到一个比较奇怪的crash问题,这里记录下。这个crash是由QA设置了一些不合理的参数引起的,还好QA当时保存了Dump文件,让我们可以慢慢分析,从而找出代码中隐藏的问题。阅读全文Richard Wei 2012-07-13 21:27 发表评论 阅读全文
posted @ 2012-07-13 21:27 Richard Wei 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 摘要: 运行库,数据节, 代码节阅读全文Richard Wei 2012-07-07 15:17 发表评论 阅读全文
posted @ 2012-07-07 15:17 Richard Wei 阅读(620) 评论(0) 推荐(0) 编辑
摘要: 摘要: 这个DirectUI界面库主要参考一个老外的程序, 支持各种Layout模式,实现了各种基本控件(SplitBar, PictureBox, Button, Radio, CheckBox, Label, HyperLink, ProgressBar, trackBar, ListBox, Edit, ComboBox, Tab Control, Toolbar, Menu, tree),支持键盘导航,支持Tooltip,支持多语言,支持换肤,支持异形窗口,支持Layered Window, 支持插件2次开发,支持Alpha通道,支持各种图像处理。阅读全文Richard Wei 20. 阅读全文
posted @ 2012-07-03 23:18 Richard Wei 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 摘要: 可以看到无论对于开发还是测试人员,windbg很多时候可以帮我们快速的定位问题, 如果借助符号文件,Windbg完全可以实现比VC IDE更强大的调试供功能, 并且有时候我们不需要源代码,不需要重新编译,直接就可以通过windbg调试和解决问题。阅读全文Richard Wei 2012-06-26 20:33 发表评论 阅读全文
posted @ 2012-06-26 20:33 Richard Wei 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 摘要: 正如我们不能确定微软的Win8 Metro能否成功,我们现在还不能确定这种PC没落的趋势是否会持续下去, 新生平台究竟会是昙花一现,还是主流趋势? 作为一名技术人员,有时候真的很无奈,虽然理论上计算机的本质和设计思想永远不会过时, 但是你一旦停止了自身对新技术的汲取,你可能会很快被淘汰。阅读全文Richard Wei 2012-06-21 22:36 发表评论 阅读全文
posted @ 2012-06-21 22:36 Richard Wei 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 摘要: 远程线程作为一项"合法"的代码注入技术,在windows上被大量使用, 它的本质就是把一块可执行代码写入到对方进程,然后让其起运行。 一般它的实现过程是这样的, 通过VirtualAllocEx在目标进程分配内存空间,然后通过WriteProcessMemory将我们的可执行代码写入到目标进程,最后通过CreateRemoteThread让我们的可执行代码在目标进称里运行起来。阅读全文Richard Wei 2012-06-20 15:38 发表评论 阅读全文
posted @ 2012-06-20 15:38 Richard Wei 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 摘要: 从理论上来说,Metro开发也是windows上最新技术的集合,有C++11的支持,有GPU加速支持的D3D(D2D)引擎,有面向对象的跨语言(元数据描述)的WinRT类库,有通过标记(XAML)描述的界面, 而且它是Native的(非托管),所以性能上也有保障。阅读全文Richard Wei 2012-06-15 09:19 发表评论 阅读全文
posted @ 2012-06-15 09:19 Richard Wei 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 摘要: 我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?阅读全文Richard Wei 2012-06-14 09:22 发表评论 阅读全文
posted @ 2012-06-14 09:22 Richard Wei 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 摘要: 那么究竟什么时候适用这种接口方式呢? 我的看法是只有当你的模块是一个单独的子系统,当对外提供功能时,才可以这么做。这里的子系统不一定要是一个很大的概念,比如一个窗口,一个COM对象都可以称为简单的子系统,但是它的前提要求是独立,对外,并且最好你可以预见到以后它的功能会改变和扩充。阅读全文Richard Wei 2012-06-13 10:08 发表评论 阅读全文
posted @ 2012-06-13 10:08 Richard Wei 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 摘要: 可以看到使用第二种实现我们只存储了一份字符串图像数据,同时有保留了图像的层次和结构属性,实现时包含了很多设计模式,比如Template, Decorate, Composite, faced等,简单而高效。阅读全文Richard Wei 2012-06-12 09:31 发表评论 阅读全文
posted @ 2012-06-12 09:31 Richard Wei 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 摘要: 在写DirectUI时有这么一个需求,就是加载一串XML,如何生成一棵对应的控件树?阅读全文Richard Wei 2012-06-10 17:31 发表评论 阅读全文
posted @ 2012-06-10 17:31 Richard Wei 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 摘要: 思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图:PS: 和同事讨论, 其他职业(比如司机或是厨师),他们只要学完基本的技能后就可以一劳永逸了,学的知识也比我们少的多,也不用担心新技术的更替。所以感觉程序员真的挺累, 如果不是出于兴趣,注定是干不久的; 付出这么多,工资比其他职业高一点,其实并没赚到什么。呵呵,不知大家怎么看?阅读全文Richard Wei 2012-06-10 12:36 发表评论 阅读全文
posted @ 2012-06-10 12:36 Richard Wei 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 摘要: Windbg的命令分为标准命令,原命令和扩展命令,输入问号(?)可以显示所有的标准命令的帮助信息; 元命令以一个点(.)开始,输入.help可以显示所有的原命令的帮助信息;扩展命令以叹号(!)开始阅读全文Richard Wei 2012-06-07 19:07 发表评论 阅读全文
posted @ 2012-06-07 19:07 Richard Wei 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 摘要: Lambda, auto, 统一初始化,智能指针,Regex, Random, function and bind, hash_map… 右值引用和Move语义, 并发(多线程库)…发布阅读全文Richard Wei 2012-06-06 17:34 发表评论 阅读全文
posted @ 2012-06-06 17:34 Richard Wei 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 摘要: 介绍如何让自己的程序支持Javascript脚本, 并提供一个简单的Demo阅读全文Richard Wei 2012-05-19 11:59 发表评论 阅读全文
posted @ 2012-05-19 11:59 Richard Wei 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 摘要: Win8 Metro 相关的一些开发资料阅读全文Richard Wei 2012-05-17 17:46 发表评论 阅读全文
posted @ 2012-05-17 17:46 Richard Wei 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 摘要: widnows下多用户多桌面的原理阅读全文Richard Wei 2012-05-12 23:37 发表评论 阅读全文
posted @ 2012-05-12 23:37 Richard Wei 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 摘要: 在帖子 "如何判断一个C++对象是否在堆栈上” 中, 又有人提出如何判断一个C++对象是否在堆上。阅读全文Richard Wei 2012-05-12 14:30 发表评论 阅读全文
posted @ 2012-05-12 14:30 Richard Wei 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 摘要: 要解答这个问题,其实就是要知道的堆栈的起始地址, 而我们知道堆栈其实就是一段有相同属性的内存页面阅读全文Richard Wei 2012-05-12 10:57 发表评论 阅读全文
posted @ 2012-05-12 10:57 Richard Wei 阅读(544) 评论(0) 推荐(0) 编辑
摘要: 摘要: 新版的QQ在截图时加入了窗口自动识别的功能,能根据鼠标的位置自动画出下面窗口的轮廓。今天有人在论坛上问起这个问题,下面我们来探讨这个功能的实现原理。阅读全文Richard Wei 2012-05-06 21:34 发表评论 阅读全文
posted @ 2012-05-06 21:34 Richard Wei 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 摘要: 在高效C++编程中看到一个不错的内存池实现方案,这里共享下,大家看看有什么不足。阅读全文Richard Wei 2012-05-05 23:23 发表评论 阅读全文
posted @ 2012-05-05 23:23 Richard Wei 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 摘要: 引用计数在软件开发中是一项非常重用的技术,它可以说是无处不,我们在不知不觉中都在和它打交道,比如 Windows上的COM和Handle, Mac上的ref句柄,脚本语言中的垃圾回收技术。阅读全文Richard Wei 2012-05-05 17:04 发表评论 阅读全文
posted @ 2012-05-05 17:04 Richard Wei 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 摘要: 好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ 和 C++ Coding Standards 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫Herb Sutter,他的这个演讲视频是 C++ and Beyond 2011上的一次公开演讲,题目是——Why C++? (如果你觉得那里的视频比较慢,你可以看优酷上的视频)(英文听力好的同学可以看一样,因为都没有中文字幕)阅读全文Richard Wei 2012-05-04 22:16 发表评论 阅读全文
posted @ 2012-05-04 22:16 Richard Wei 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 摘要: 这个东西大概是4年多前写的,那时写代码很疯狂,不知疲惫,一写就是好几万行。现在则更喜欢研究别人的代码,有时也写些测试代码,或者研究开源的东西。希望真正有些积累后, 再考虑写自己的东西。阅读全文Richard Wei 2012-05-03 23:00 发表评论 阅读全文
posted @ 2012-05-03 23:00 Richard Wei 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 摘要: API Hook技术可以在自动化测试时可以实现我们平时测试时做不到的事情,通过目标进程的窗口层次和该技术结合,基本上可以将自动测试覆盖率达到85%以上, 不能达到100%是因为有一部分UI信息是通过图片来表现,这个涉及到图像识别了阅读全文Richard Wei 2012-05-03 22:22 发表评论 阅读全文
posted @ 2012-05-03 22:22 Richard Wei 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 摘要: 今天在QQ群里有人问怎样实现将自己的窗口嵌入桌面,让它和桌面融为一体,就像很多桌面日历软件那样。阅读全文Richard Wei 2012-05-03 22:07 发表评论 阅读全文
posted @ 2012-05-03 22:07 Richard Wei 阅读(335) 评论(0) 推荐(0) 编辑