1 / 88
文档名称:

编程入门.doc

格式:doc   大小:4,605KB   页数:88页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编程入门.doc

上传人:jiaoyuan2014 2020/5/9 文件大小:4.50 MB

下载得到文件列表

编程入门.doc

文档介绍

文档介绍:(1)IPersistStreamInit::InitNew┄初始化永久对象为默认状态。原型:HRESULTInitNew();返回值:成功,返回S_OK;否则,返回HRESULT错误码。(1)IPersistStorage::InitNew┄初始化一个新的存贮对象。原型:HRESULTInitNew(IStorage*pStg); //→存贮对象的IStorage接口返回值:成功,返回S_OK;否则,返回HRESULT错误码。(2)IPersistStorage::Load┄从一个现有存贮初始化一个对象。原型:HRESULTLoad(IStorage*pStg); //→现有存贮对象的IStorage接口返回值:成功,返回S_OK;否则,返回HRESULT错误码。(3)IPersistStorage::SetData┄提。原型:(4)IPersistStorage::SetData┄提。原型:(5)IPersistStorage::SetData┄提。原型:(1)IPersistStream::SetData┄提。原型:(1)IAdviseSink::OnDataChange┄当前已注册的服务器的通知接收器对象中的数据已更改。原型:voidOnDataChange(FORMATETC*pFormatetc, //→FORMATETC结构(数据格式)STGMEDIUM*pStgmed); //→STGMEDIUM结构(数据位置)备注:通知接收器是客户程序实现的一个内部对象。(2)IAdviseSink::OnViewChange┄通知接收器对象及其视图已更改。原型:voidOnViewChange(DWORDdwAspect, //LONGlindex); //(3)IAdviseSink::OnRename┄通知所有注册的接收器对象已更名。原型:voidOnRename(IMoniker*pmk); //(4)IAdviseSink::OnSave┄对象已被保存到磁盘。原型:voidOnSave();(5)IAdviseSink::OnClose┄对象已被关闭。原型:voidOnClose();组件,在组件中实现了一个自定义接口(当然可把200个函数都加到这一个接口中,果真如此的话,恐怕就没有人使用这个组件了)。一个组件既然可提供多个接口,那么在设计时,就应按函数功能进行分类,把不同功能分类的函数用多个接口表现出来。优点是:、功能集中,便于学****使用;。当给组件增加函数时,无需修改已发表的接口,而是提供一个新的接口来完成功能扩展。接口结构如下:组件A有2个自定义接口,组件B是A的升级假设设计了组件A,它有2个自定义接口。IMathe有Add方法完成整数加法,IStr有Cat方法完成字符串连接。升级组件A到B,欲增加一个Mul方法完成整数乘法。由于组件A已发布,因此不能把这个方法安排到IMathe中。解决方法是再定义一个新接口IMathe2,在新接口中增加Mul方法并保留Add方法。这样,老用户不知道新接口IMathe2的存在,仍可使用旧接口IMathe;而新用户则可抛弃IMathe直接使用IMathe2的新接口功能。组件是一种基于二进制对象协议的概念。可理解为,这是一个二进制意义上的类。组件,对外暴露的不是一组方法,组件直观理解就是一个类,但这不是严谨的定义(有的语言没有类,组件);COM组件通常是一个类,也可能是用多个类实现的。是一个类还是多个类实现的,对客户而言不知道也不关心。从COM意义上讲,接口是一种和目前vtbl机制相容的二进制协议,且vtbl的前3项与IUnknown接口相容(从继承角度上讲可理解为要求从IUnknown继承)。可定义如下接口:interfaceIFoo:IUnknown{virtualvoid__stdcallfooA()=0;virtualint__stdcallfooB(intarg1,intarg2)=0;};也可不这样写,而是用纯C风格:structIFooVtbl{HRESULT(__stdcall*QueryInterface)(void*pThis,constGUID*iid,void**ppv);ULONG(__stdcall*AddRef)(void*pThis);ULONG(__stdcall*Release)(void*pThis);void(__stdcall*fooA)(void*pThis);int(__stdcall*fooB)(void*pThis,intarg1,intar