COM技术内幕 读书笔记——第二章 接 口
来源:互联网 发布:es7 js 注解功能 编辑:程序博客网 时间:2024/05/17 04:36
第二章 接 口
什么是接口
DLL的接口可以理解为其导出的那些函数,C++类的接口则是该类的一个成员函数集。
对于COM来说,接口是一个包含一个函数指针数组的内存结构,每一个数组元素包含的是一个由组件所实现的函数的地址。对COM而言,接口就是这样的一个内存结构,无关细节与具体语言实现。(即不管是C#还是C++实现,只要给我这么个内存结构,我就认为你是一个接口)
接口的作用
接口对COM来说很总要!只需记住下面三点:
(1)COM中接口就是一切。
(2)对客户而言,一个组件就是一个接口集合(客户通过QueryInterface获取想要的接口)。
(3)客户只能通过接口与COM组件打交道。
COM接口在C++中的代码实现
参加COM中接口的定义,在C++中,可以通过抽象基类来实现COM接口。
抽象基类,其实是定义了一个内存结构,抽象基类仅包含虚函数,因此其包含虚表与虚指针。如下图所示,抽象基类如
interface IX{ virtual void STDMETHODTYPE Fx1()=0; virtual void STDMETHODTYPE Fx2()=0; virtual void STDMETHODTYPE Fx3()=0;}
其在内存中仅包含一个虚指针,而这个虚指针则指向一组虚函数的实现列表(函数指针数组)。这刚好符合COM对接口的定义。
因此COM接口在C++中的实现是通过抽象基类实现的。子类继承抽象父类,并实现或重写抽象函数。子类同时也就继承了这种内存结构,即子类获得了向客户提供这种接口的提供能力,同时对于组件对于多个接口的支持,可以通过让子类多重继承抽象父类来实现。
一些细节
1、标准调用约定
在Microsoft平台上,COM接口提供的所以函数均遵循PASCAL调用约定,即函数将在返回到调用者之前进行参数的出栈处理。因此接口中的函数均有修饰符__standcall 或STDMETHODCALL
2、C++中接口虽然是抽象基类实现,但可以不用class来声明类,而是用OBJBASE.H中定义的宏
#define interface struct这样默认公有属性。
0 0
- COM技术内幕 读书笔记——第二章 接 口
- 《COM技术内幕》读书笔记——第1章 组件
- 《COM技术内幕》读书笔记——第6章
- COM技术内幕读书笔记
- 《COM技术内幕》读书笔记——第2章 COM接口的实现
- 读书笔记——COM技术内幕(1)组件
- COM技术内幕 读书笔记——第一章 组件
- 读书笔记_C#技术内幕_第二章
- Struts2 技术内幕 读书笔记(第二章)
- 《COM技术内幕》读书笔记——第3章 QueryInterface函数
- 《COM技术内幕》读书笔记——第4章 引用计数
- 《COM技术内幕》读书笔记——第5章 动态连接
- 《COM技术内幕》读书笔记——第10章 EXE中的服务器 代码调试
- com技术内幕读书笔记2
- com技术内幕读书笔记1
- com技术内幕读书笔记2
- 读书笔记_C#技术内幕_第二十七章(属性)
- 读书笔记_C#技术内幕_第二十八章(反射)
- HDU 4756 Install Air Conditioning(MST + 树形DP)
- foreach 循环list嵌套list的
- 使用类型转换函数的简单例子
- Pattern类与Matcher类的基本方法理解
- fopen、fread、fwrite、fclose、fseek、feof、ftell的用法简介
- COM技术内幕 读书笔记——第二章 接 口
- 堆和栈的区别(转过无数次的文章)
- 同步工具类--闭锁
- 网络编程UDP协议——聊天软件
- c++ 多线程 互斥量
- 使用spring-amqp发送消息及同步接收消息
- mfc获取窗口句柄
- 排队问题
- 【金阳光测试】Android自动化测试第一季第二讲--MonkeyRunner