《COM本质论》读书笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《COM本质论》读书笔记相关的知识,希望对你有一定的参考价值。

前言

虽然一直都不喜欢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本质论》读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

C#本质论读书笔记

《C#本质论》读书笔记(18)多线程处理

《C#本质论》读书笔记(16)构建自定义集合

读书笔记

《C#本质论》读书笔记(15)使用查询表达式的LINQ

《修改代码的艺术》读书笔记