标签:
前言
虽然一直都不喜欢Windows的应用开发,不过由于现在工作需要,必须对 Win32 开发非常熟悉。 Windows 上的 C++ 开发,逃不过对组建对象模型COM(Component Object Model)编程的学习和理解,尤其是游戏、音视频领域 —— Direct3D/Direct2D/DirectShow/DirectSound 等等。COM已经是上个世纪的产物了,所以相关的学习资料也都很老了,不过《COM本质论》是一本不错的入门书。在此我做做笔记加深理解。
第1章:COM是一个更好的C++
"静态库",不同程序有相同的代码片段 FastString.obj。
“动态库”,不同程序可以指向相同的代码片段,减少内存空间。
C++的编译模型,它不能够支持独立的二进制组建的设计。C++的编译模型要求客户必须知道对象的布局结构,从而导致了客户和对象可执行代码之间的二进制耦合关系。
封装(encapsulation)的概念是把“一个对象的外观(接口)同其实际工作方式(实现)分离开来”为基础。C++的问题在于这条原则并没有被应用到二进制层次上,因为C++类既是接口也是实现。
第2章:接口
COM 提供了 接口定义语言(Interface Definition Language, IDL),它只用到了基本的、大家都很熟悉的 C 语法,同时加入了某些用来 ”消除 C 语言中二义性特征“的能力。
COM IDL 基于 Open Software Foundation 的 Distributed Computing Environment Remote Procedure Call (分布式 RPC 远程调用)。
几乎素有的COM方法都会返回一个HRESULT类型的错误号码。
SDK 头文件定义了两个宏可以简化 HRESULT 有关的代码:
COM 接口都被分配一个二进制名字:全局唯一标识符 GUID,是 128 bit 的,GUID 基于 UUID。
IID: 接口 ID (Interface ID)
CLSID: 类 ID (class ID)
第3章:类
COM 有三种激活方式:
CoGetClassObject : 绑定到类对象的引用;
CoCreateInstanceEx :绑定到指向一个新的类实例的引用
CoGetInstanceFromFile: 绑定到指向文件中永久实例的引用。
第4章:对象
(未完待续)
《COM本质论》读书笔记
标签:
原文地址:http://www.cnblogs.com/rhzhang/p/5184262.html