摘要: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。  阅读全文
posted @ 2012-10-15 20:16 Richard Wei 阅读(3080) | 评论 (0)编辑 收藏
     摘要: 经过上面的比较, 我们可以得出一些结论:
消息方式的强项是耦合性和扩展性,以及监控的方便性,个人感觉比较适合于Server端的规模应用。
接口方式的强项是性能高效以及开发的方便性, 比较适用于同一进程内客户端的小规模应用。

但是大部分时候, 对于架构师或是公司领导,他们会更关注可耦合性和可扩展性,所以他们会倾向于选择消息方式,尽管有时可能不是那么适用。
  阅读全文
posted @ 2012-10-12 22:50 Richard Wei 阅读(4541) | 评论 (5)编辑 收藏
     摘要: operator new的一些原则:
a. 一般不要重写全局的operator new, 具体可以参考 不要重载全局 ::operator new
b. 如果重载了operator new, 同时提供所有版本(plain new, nothrow new, placement new)
c. 成对的提供new和delete, 即如果重载了operator new, 同时重载operator delete  阅读全文
posted @ 2012-10-06 22:25 Richard Wei 阅读(2722) | 评论 (0)编辑 收藏
     摘要: C++编程规范...  阅读全文
posted @ 2012-10-06 20:05 Richard Wei 阅读(850) | 评论 (0)编辑 收藏
     摘要: 看到ATL中有3个类的代码比较比较重复,在atlbase.h中,分别是CAutoVectorPtr, CAutoPtr和CAutoStackPtr,他们的功能其实很类似STL中的autoptr, 但是这里因为针对不同的分配对象而用了3个不同的类,其中CAutoVectorPtr是针对数组类型的,CAutoPtr是针对普通的非数组类型,而CAutoStackPtr针对的是_malloca分...  阅读全文
posted @ 2012-09-24 22:59 Richard Wei 阅读(1760) | 评论 (4)编辑 收藏
     摘要: 总之,拿着一把刀,庖丁解牛般的剖析语言背后的实现细节,看起来不是那么实用,但是它能让你对语言的理解更深刻。实际上ATL中大量应用上面的技术,如果没有对C++ 对象模型有比较深刻的理解,是很难深入下去的。  阅读全文
posted @ 2012-09-21 23:02 Richard Wei 阅读(4100) | 评论 (2)编辑 收藏
     摘要: 通过上面的分析,我们验证了平时C++书上关于各种类型变量存储区域的假设,简单来说就是全局变量和静态变量会被编译到可执行文件的数据节(分只读和可读写)中, 非静态的局部变量则分配在堆栈(stack)上,而new(malloc)出来的内存则分配在堆(heap)上。  阅读全文
posted @ 2012-09-20 21:57 Richard Wei 阅读(2423) | 评论 (0)编辑 收藏
     摘要: 通过上面的介绍,相信大家对程序内存有了比较全局的理解,以后大家分析问题,遇到一个地址,首先要判断这个地址分布在哪里:
如果是Image上,那么是在哪个模块中,这个地址是属于该模块的代码段(.text)还是数据段(.data),如果是代码段,又是属于哪个函数?
如果是Heap上,那么究竟是在哪个堆里面,是我们new出来的吗,是在什么时候new的(new时堆栈状况)?
如果是在Stack上,那么究竟是属于哪个线程的堆栈,当时线程的堆栈是怎么样?

总之,程序在内存中运行,只有你真正理解了内存,你才能真正懂计算机。  阅读全文
posted @ 2012-09-19 23:24 Richard Wei 阅读(6760) | 评论 (6)编辑 收藏
     摘要: 从上面的例子我们可以看到,对于可变参数的函数,有2种东西需要确定,一是可变参数的数量, 二是可变参数的类型,上面的例子中,参数数量我们是在第一个参数指定的,参数类型我们是自己约定的。这种方式在实际使用中显然是不方便,于是我们就有了_vsprintf, 我们根据一个格式化字符串的来表示可变参数的类型和数量,比如C教程中入门就要学习printf, sprintf等。

总的来说可变参数给我们提供了很高的灵活性和方便性,但是也给会造成不确定性,降低我们程序的安全性,很多时候可变参数数量或类型不匹配,就会造成一些不容察觉的问题,只有更好的理解它背后的原理,我们才能更好的驾驭它。  阅读全文
posted @ 2012-09-18 00:04 Richard Wei 阅读(1934) | 评论 (0)编辑 收藏
     摘要: 当然,上面几种DLL对外暴露接口的方式本质上没有区别,都是利用PE文件的导出节来导出数据和函数,但是根据它们使用方式的不同,对外部模块来说还是有很大的区别,我们的推荐次序依次是:COM方式->导出API函数方式->导出类方式。  阅读全文
posted @ 2012-08-29 18:58 Richard Wei 阅读(4056) | 评论 (0)编辑 收藏
     摘要: 最后简单比较下上面3种实现回调的方法:
第一种Callback的方法是面向过程的,使用简单而且灵活,正如C语言本身。
第二种Sink的方法是面向对象的,在C++里使用较多, 可以在一个Sink里封装一组回调接口,适用于一系列比较固定的回调事件。
第三种Delegate的方法也是面向对象的,和Sink封装一组接口不同,Delegate的封装是以函数为单位,粒度比Sink更小更灵活。   阅读全文
posted @ 2012-08-28 12:36 Richard Wei 阅读(4931) | 评论 (3)编辑 收藏
     摘要: 在网上关于窗口视觉效果,有2个问题被问得最多:
第一个是如何让窗口边框有阴影效果?
第二个是如何让窗口控件有半透明效果?
  阅读全文
posted @ 2012-08-23 00:38 Richard Wei 阅读(7162) | 评论 (4)编辑 收藏
     摘要: 总的来说DirectUI是趋势,而微软的WPF代表了DirectUI最先进的技术方向,换肤对于DirectUI来说非常容易。随着Win7,Win8 的普及,传统界面库的市场会越来越小,一来因为系统本身已经很炫了,二来微软自己的WPF和Xaml技术基本上已经可以实现任何想要的效果。当然只要XP不消亡,传统的界面库还是有自己的一席之地。  阅读全文
posted @ 2012-08-21 22:33 Richard Wei 阅读(5933) | 评论 (2)编辑 收藏
     摘要: 主要特性:
(1)软件小而高效,使用流畅,设计人性化
(2)支持截图区域的手工选择和根据窗口自动识别选择
(3)支持矩形,圆形,直线,箭头,画笔,文本等注释工具
(4)支持橡皮擦除功能
(5)无限次数的撤销和重做
(6)支持鼠标光标的截取
(7)支持鼠标区域跟踪和放大
(8)支持各种图像文件格式的保存和编辑
(9)支持多显示器
(10)支持换肤和多语言  阅读全文
posted @ 2012-08-21 00:02 Richard Wei 阅读(7038) | 评论 (19)编辑 收藏
     摘要: 做为一名Windows平台上的C/C++开发人员,我们有N个理由学习WinDbg的使用:
有些Bug只有在客户和QA的机器上才能重现,我们不可能在他们的机器上装一个VC吧
WinDbg可以让我们方便的保存和分析Dump文件
WinDbg的调试功能比VC强大的多,比如它有强大的API断点和条件断点
调试内核和驱动,我们只能用WinDbg
用WinDbg可以让你更深入的理解系统,理解计算机,用VC你看到的是自己的代码,用WinDbg你看到的是整个进程
......
最重要的,微软用WinDbg开发和调试Windows操作系统,它是Windows平台上最重要的调试工具.  阅读全文
posted @ 2012-08-15 14:12 Richard Wei 阅读(4413) | 评论 (6)编辑 收藏
     摘要: 经常有初学者询问如何学习Windows编程?

很多人从MFC开始学习,结果常常是一头雾水,知难而退;也有人毅力坚强,熬过了MFC的阵痛期,最后却是知其然而不知其所以然,并且思维被限制在MFC的框架之中,遇到稍微有点规模的程序就无从下手了。  阅读全文
posted @ 2012-08-15 13:37 Richard Wei 阅读(7488) | 评论 (5)编辑 收藏
     摘要: 那么Windbg分析Dump时,会如何推理堆栈过程呢?
如果每个函数都是有标准的push ebp, 那么按照ebp递推就可以了;
否这就只能用其他方法分析,比如看看堆栈里某个地址是不是函数返回地址(该地址属于某个模块的代码段),这样就可以确定该地址是某个函数堆栈桢的起始地址。  阅读全文
posted @ 2012-07-20 14:00 Richard Wei 阅读(5234) | 评论 (3)编辑 收藏
     摘要: 今天遇到一个比较奇怪的crash问题,这里记录下。这个crash是由QA设置了一些不合理的参数引起的,还好QA当时保存了Dump文件,让我们可以慢慢分析,从而找出代码中隐藏的问题。  阅读全文
posted @ 2012-07-13 21:27 Richard Wei 阅读(3762) | 评论 (4)编辑 收藏
     摘要: 运行库,数据节, 代码节  阅读全文
posted @ 2012-07-07 15:17 Richard Wei 阅读(5166) | 评论 (1)编辑 收藏
     摘要: 这个DirectUI界面库主要参考一个老外的程序, 支持各种Layout模式,实现了各种基本控件(SplitBar, PictureBox, Button, Radio, CheckBox, Label, HyperLink, ProgressBar, trackBar, ListBox, Edit, ComboBox, Tab Control, Toolbar, Menu, tree),支持键盘导航,支持Tooltip,支持多语言,支持换肤,支持异形窗口,支持Layered Window, 支持插件2次开发,支持Alpha通道,支持各种图像处理。  阅读全文
posted @ 2012-07-03 23:18 Richard Wei 阅读(35853) | 评论 (35)编辑 收藏
     摘要: 可以看到无论对于开发还是测试人员,windbg很多时候可以帮我们快速的定位问题, 如果借助符号文件,Windbg完全可以实现比VC IDE更强大的调试供功能, 并且有时候我们不需要源代码,不需要重新编译,直接就可以通过windbg调试和解决问题。  阅读全文
posted @ 2012-06-26 20:33 Richard Wei 阅读(3588) | 评论 (3)编辑 收藏
     摘要: 正如我们不能确定微软的Win8 Metro能否成功,我们现在还不能确定这种PC没落的趋势是否会持续下去, 新生平台究竟会是昙花一现,还是主流趋势? 作为一名技术人员,有时候真的很无奈,虽然理论上计算机的本质和设计思想永远不会过时, 但是你一旦停止了自身对新技术的汲取,你可能会很快被淘汰。
  阅读全文
posted @ 2012-06-21 22:36 Richard Wei 阅读(4170) | 评论 (6)编辑 收藏
     摘要: 远程线程作为一项"合法"的代码注入技术,在windows上被大量使用, 它的本质就是把一块可执行代码写入到对方进程,然后让其起运行。
一般它的实现过程是这样的, 通过VirtualAllocEx在目标进程分配内存空间,然后通过WriteProcessMemory将我们的可执行代码写入到目标进程,最后通过CreateRemoteThread让我们的可执行代码在目标进称里运行起来。  阅读全文
posted @ 2012-06-20 15:38 Richard Wei 阅读(3900) | 评论 (5)编辑 收藏
     摘要: 从理论上来说,Metro开发也是windows上最新技术的集合,有C++11的支持,有GPU加速支持的D3D(D2D)引擎,有面向对象的跨语言(元数据描述)的WinRT类库,有通过标记(XAML)描述的界面, 而且它是Native的(非托管),所以性能上也有保障。  阅读全文
posted @ 2012-06-15 09:19 Richard Wei 阅读(4163) | 评论 (6)编辑 收藏
     摘要: 我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?  阅读全文
posted @ 2012-06-14 09:22 Richard Wei 阅读(5286) | 评论 (13)编辑 收藏
     摘要: 那么究竟什么时候适用这种接口方式呢?
我的看法是只有当你的模块是一个单独的子系统,当对外提供功能时,才可以这么做。这里的子系统不一定要是一个很大的概念,比如一个窗口,一个COM对象都可以称为简单的子系统,但是它的前提要求是独立,对外,并且最好你可以预见到以后它的功能会改变和扩充。  阅读全文
posted @ 2012-06-13 10:08 Richard Wei 阅读(3292) | 评论 (5)编辑 收藏
     摘要: 可以看到使用第二种实现我们只存储了一份字符串图像数据,同时有保留了图像的层次和结构属性,实现时包含了很多设计模式,比如Template, Decorate, Composite, Facade等,简单而高效。
  阅读全文
posted @ 2012-06-12 09:31 Richard Wei 阅读(5365) | 评论 (10)编辑 收藏
     摘要: 在写DirectUI时有这么一个需求,就是加载一串XML,如何生成一棵对应的控件树?  阅读全文
posted @ 2012-06-10 17:31 Richard Wei 阅读(4443) | 评论 (4)编辑 收藏
     摘要: 思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图:

PS: 和同事讨论, 其他职业(比如司机或是厨师),他们只要学完基本的技能后就可以一劳永逸了,学的知识也比我们少的多,也不用担心新技术的更替。

所以感觉程序员真的挺累, 如果不是出于兴趣,注定是干不久的; 付出这么多,工资比其他职业高一点,其实并没赚到什么。

呵呵,不知大家怎么看?  阅读全文
posted @ 2012-06-10 12:36 Richard Wei 阅读(10367) | 评论 (16)编辑 收藏
     摘要: Windbg的命令分为标准命令,原命令和扩展命令,输入问号(?)可以显示所有的标准命令的帮助信息; 元命令以一个点(.)开始,输入.help可以显示所有的原命令的帮助信息;扩展命令以叹号(!)开始  阅读全文
posted @ 2012-06-07 19:07 Richard Wei 阅读(22837) | 评论 (1)编辑 收藏
     摘要: Lambda, auto, 统一初始化,智能指针,Regex, Random,
function and bind, hash_map…
右值引用和Move语义, 并发(多线程库)…发布  阅读全文
posted @ 2012-06-06 17:34 Richard Wei 阅读(3446) | 评论 (4)编辑 收藏
     摘要: 介绍如何让自己的程序支持Javascript脚本, 并提供一个简单的Demo  阅读全文
posted @ 2012-05-19 11:59 Richard Wei 阅读(15848) | 评论 (0)编辑 收藏
     摘要: Win8 Metro 相关的一些开发资料  阅读全文
posted @ 2012-05-17 17:46 Richard Wei 阅读(1034) | 评论 (0)编辑 收藏
     摘要: widnows下多用户多桌面的原理  阅读全文
posted @ 2012-05-12 23:37 Richard Wei 阅读(4251) | 评论 (0)编辑 收藏
     摘要: 在帖子 "如何判断一个C++对象是否在堆栈上” 中, 又有人提出如何判断一个C++对象是否在堆上。  阅读全文
posted @ 2012-05-12 14:30 Richard Wei 阅读(5249) | 评论 (8)编辑 收藏
     摘要: 要解答这个问题,其实就是要知道的堆栈的起始地址, 而我们知道堆栈其实就是一段有相同属性的内存页面  阅读全文
posted @ 2012-05-12 10:57 Richard Wei 阅读(5515) | 评论 (9)编辑 收藏
     摘要: 新版的QQ在截图时加入了窗口自动识别的功能,能根据鼠标的位置自动画出下面窗口的轮廓。今天有人在论坛上问起这个问题,下面我们来探讨这个功能的实现原理。  阅读全文
posted @ 2012-05-06 21:34 Richard Wei 阅读(11890) | 评论 (9)编辑 收藏
     摘要: 在高效C++编程中看到一个不错的内存池实现方案,这里共享下,大家看看有什么不足。  阅读全文
posted @ 2012-05-05 23:23 Richard Wei 阅读(18213) | 评论 (12)编辑 收藏
     摘要: 引用计数在软件开发中是一项非常重用的技术,它可以说是无处不,我们在不知不觉中都在和它打交道,比如 Windows上的COM和Handle, Mac上的ref句柄,脚本语言中的垃圾回收技术。  阅读全文
posted @ 2012-05-05 17:04 Richard Wei 阅读(4915) | 评论 (4)编辑 收藏
     摘要: 好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ 和 C++ Coding Standards 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫Herb Sutter,他的这个演讲视频是 C++ and Beyond 2011上的一次公开演讲,题目是——Why C++? (如果你觉得那里的视频比较慢,你可以看优酷上的视频)(英文听力好的同学可以看一样,因为都没有中文字幕)  阅读全文
posted @ 2012-05-04 22:16 Richard Wei 阅读(1617) | 评论 (0)编辑 收藏
仅列出标题
共4页: 1 2 3 4