八年级语文上册com课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《八年级语文上册com课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 年级 语文 上册 com 课件 下载 _其它资料_语文_初中
- 资源描述:
-
1、例子(G:File内部交流赵国光comExampleDropTarget)IDropTarget的定义 interface IDropTarget:public IUnknown public:virtual HRESULT STDMETHODCALLTYPE DragEnter(/*uniquein*/IDataObject _RPC_FAR*pDataObj,/*in*/DWORD grfKeyState,/*in*/POINTL pt,/*outin*/DWORD _RPC_FAR*pdwEffect)=0;virtual HRESULT STDMETHODCALLTYPE DragOv
2、er(/*in*/DWORD grfKeyState,/*in*/POINTL pt,/*outin*/DWORD _RPC_FAR*pdwEffect)=0;virtual HRESULT STDMETHODCALLTYPE DragLeave(void)=0;virtual HRESULT STDMETHODCALLTYPE Drop(/*uniquein*/IDataObject _RPC_FAR*pDataObj,/*in*/DWORD grfKeyState,/*in*/POINTL pt,/*outin*/DWORD _RPC_FAR*pdwEffect)=0;Component
3、Object Model(组件对象模型)微软提出的二进制上的组件标准,定义了对象(组件)之间进行通信的协议。COM是一个更好的C+某一个c+库厂商开发生产了一个算法,可以在O(1)时间阶内完成字符串搜索。为了让客户能够简单的使用这个算法,库厂商创建了一个类:FastString示例:faststring.hfaststring.cpp传统上,库厂商分发C+库一直以源码的形式进行.问题:代码复制,多个应用使用相同的代码占用磁盘空间以及内存.代码更新,将源码重新分发,重新编译链接,失去了模块化的特征.应用A 应用C 应用BFastString.objFastString.objFastString
4、.obj为了解决重复代码以及更新困难的问题,将FastString类封装为一个dll是一个马上想到的方法._declspec(dllexport)关键字.引入库(import library)应用A应用C应用BFastString.dllDll引入库C+缺少二进制级别的标准编译器和链接器的兼容性名字的问题,链接时表达符号名字名字的问题,链接时表达符号名字 为了支持函数重载和操作符重载,不同的编译器/链接器会任意修改入口点的符号名字,称为名字改编(name mangling)使用 extern“C”可以消除名字改编现象,但只对全局函数有效.使用模块定义文件(Module Definition F
5、ile DEF).在运行时表达语言的不同特征在运行时表达语言的不同特征 编译器厂商对语言的特征有不同方式的实现,异常(Exception)是一个例子.假如已经解决了编译器和链接器的问题,建立二进制组件的下一个障碍则和封装有关.FastString的Length方法有问题,修改FastString类的定义.FastString dll升级为2.0,解决Length的问题.FastString Dll分版本改名策略.新应用(用修改后的FastString)旧应用FastString.dll(2.0)封装的基础在C+中,这个原则没有应用到二进制层,因为C+类即是接口也是实现.如何做到接口与实现的分离
6、将接口与实现分立成两个实体,在c+中表现为两个类,接口类和实现类.接口类只对一定的数据类型进行描述.实现类对数据类型作具体的实现.接口类的定义class FastString;class _declspec(dllexport)FastStringInf private:FastString*m_pObj;public:FastStringInf(const char*psz);FastStringInf();int Length()const;int Find(const char*psz)const;示例:G:File内部交流赵国光comExamplefaststringdll2编译器/链
7、接器的问题依然没有解决。利用所有编译器/链接器的一致性。复合结构在运行时表现形式对不同编译器一致.所有编译器使用相同的堆栈规则传递参数.所有所有C+编译器实现相同的虚函数调用机制编译器实现相同的虚函数调用机制.也就是说对每个也就是说对每个c+编译器来说,一个对象在内存中编译器来说,一个对象在内存中如何表示,以及在运行时怎样调用虚函数都必须一致如何表示,以及在运行时怎样调用虚函数都必须一致以上三条假设所有编译器必须要遵从.vptr以及vtbladjustor thunk(win32),CFRONT(solaris)vptrv_fun1v_fun2v_fun3vtblFastString的抽象基类
8、class IFastStringpublic:virtual int Length()const=0;virtual int Find(const char*psz)const=0;vptrLengthFindvtblIFastString内存结构class FastString public:IFastStringprivate:const int m_cch;char*m_psz;public:FastString(const char*psz);FastString(void);int Length(void)const;int Find(const char*psz)const;vp
9、tr LengthFindvtblFastString内存结构m_cchm_pszextern“C”IFastString*CreateFastStringObject(const char*psz)return new FastString(psz);new方法在dll内部被调用。考虑如下用法:IFastString*fs=CreateFastStringObject(“hellow everyone”);if(fs)int pos=fs-Find(“very”);delete fs;问题:内存泄露。原因:IFastString的析构函数并不是虚函数。解决办法:显示的使用删除方法删除自身。示
10、例:G:File内部交流赵国光comExamplefaststringdll3减少应用程序初始化的工作。dll不存在也不会导致系统出现错误。在运行时动态选择不同的实现。(另外的意义是组件升级)接口的改变或增加都可能导致客户代码重新编译。class IFastString public:virtual int Delete(void)=0;virtual int Length()const=0;virtual int Find(const char*psz)const=0;/新功能virtual int FindN(const char*psz)const=0;新方法追加在接口定义的尾部,老客户
展开阅读全文