com技术内幕--读书笔记(2)
来源:互联网 发布:网络推广的作用 编辑:程序博客网 时间:2024/05/17 23:27
第二章
本章讨论了接口在COM中的作用,以及COM规范对接口的内存结构要求。
DLL的接口是它所输出的那些函数,C++类的接口则是该类的成员函数集,COM接口是一组由组件实现并提供给客户使用的函数。
在COM中,接口是一个函数指针数组(就是一个函数集合),组件是一个接口集,实现了N个接口。组件封装了接口内部实现细节,使客户可以用同样的调用方式来使用不同的组件(多态)。接口设计的好的话,将可以得到可复用性极高的结构。
我们使用C++的抽象基类的多重继承来实现COM组件,使用抽象基类,C++编译器可以生成符合COM二进制标准的接口内存结构。
抽象基类 的内存结构
IX既是一个抽象基类,也是一个COM接口,是因为其内存结构符合COM规范的要求。
根据C++的抽象基类知识可以知道,IX的内部是一个指向函数列表的指针,它的大小是4。
interface IX { virtual void __stdcall Fx1() = 0; virtual void __stdcall Fx2() = 0; }; sizeof(IX) == 4
本章给出的例子,并不是创建真正的COM组件,客户与COM组件的通信也不是这样的,只是建立COM和客户的第一步,后面几章会进行完善。
//Iface.cpp//use cl iface,cpp//#include <iostream>#include <objbase.h>using namespace std;void trace(const char *pMsg){cout<<pMsg<<endl;}interface IX{virtual void __stdcall Fx1() = 0;virtual void __stdcall Fx2() = 0;};interface IY{virtual void __stdcall Fy1() = 0;virtual void __stdcall Fy2() = 0;};class CA:public IX, public IY{public:virtual void _stdcall Fx1() {cout<<"CA::Fx1"<<endl;}virtual void __stdcall Fx2(){cout<<"CA::Fx2"<<endl;}virtual void __stdcall Fy1(){cout<<"CA::Fy1"<<endl;}virtual void __stdcall Fy2(){cout<<"CA::Fy2"<<endl;}};int main(){trace("client:creat an instance of the componet");CA *pA = new CA;//Get Ix PointerIX *pIx = pA;trace("client:use the IX interface");pIx->Fx1();pIx->Fx2();//Get Iy PointerIY *pIy = pA;pIy->Fy1();pIy->Fy2();trace("client:delete the component");delete pA;return 0;}运行结果:
- com技术内幕--读书笔记(2)
- com技术内幕读书笔记2
- com技术内幕读书笔记2
- COM技术内幕读书笔记
- com技术内幕--读书笔记(1)
- com技术内幕--读书笔记(3)
- com技术内幕--读书笔记(4)
- com技术内幕--读书笔记(5)
- com技术内幕--读书笔记(6)
- com技术内幕--读书笔记(7)
- com技术内幕--读书笔记(8_2)
- com技术内幕--读书笔记(8_1)
- com技术内幕读书笔记1
- 读书笔记——COM技术内幕(1)组件
- COM技术内幕-读书笔记-系列之零
- COM技术内幕-读书笔记-系列之一
- COM技术内幕-读书笔记-系列之二
- COM技术内幕-读书笔记-系列之三
- struts2中 ServletActionContext与ActionContext区别
- ogre Light,billboard ,Controller
- 将ocx和DLL文件打包成cab文件,inf的编写
- ActiveX控件打包成Cab置于网页中自动下载安装
- linux之crontab
- com技术内幕--读书笔记(2)
- PHP函数
- Qt辅助脚本工具syncqt
- 简单的jquery选项卡插件
- Android SDK Tutorials系列 - Hello Localization
- Flex4中list与itemRenderer项目渲染器中子对象之间访问
- 技术人创业建站简略指南(Version 0.03)
- “WM_MOUSEWHEEL” : 未声明的标识符
- 计算机四级数据库工程师重难点