当前位置: 首页 > news >正文

顺德网站建设找顺的网页设计培训哪家机构好

顺德网站建设找顺的,网页设计培训哪家机构好,百度不收录网站内页,WordPress本地可以调出点赞功能吗COM 组件设计与应用#xff08;十一#xff09;IDispatch 及双接口的调用作者#xff1a;杨老师 下载源代码一、前言 前段时间#xff0c;由于工作比较忙#xff0c;没有能及时地写作。其间收到了很多网友的来信询问和鼓励#xff0c;在此一并表示感谢。咳......我也需…COM 组件设计与应用十一IDispatch 及双接口的调用作者杨老师 下载源代码一、前言    前段时间由于工作比较忙没有能及时地写作。其间收到了很多网友的来信询问和鼓励在此一并表示感谢。咳......我也需要工作来养家糊口呀......    上回书介绍了两种方法来写自动化(IDispatch)接口的组件程序一是用 MFC 方式编写“纯粹”的 IDispatch 接口二是用 ATL 方式编写“双接口”的组件。 二、IDispatch 接口和双接口    使用者要想调用普通的 COM 组件功能必须要加载这个组件的类型库(Type library)文件 tlb(比如在 VC 中使用 #import)。然而在脚本程序中由于脚本是被解释执行的所以无法使用加载类型库的方式进行预编译。那么脚本解释器如何使用 COM 组件那这就是自动化(IDispatch)组件大显身手的地方了。IDispatch 接口需要实现4个函数调用者只通过这4个函数就能实现调用自动化组件中所有的函数。这4个函数功能如下  HRESULT GetTypeInfoCount(    [out] UINT * pctinfo)组件中提供几个类型库当然一般都是一个啦。但如果你在一个组件中实现了多个 IDispatch 接口那就不一定啦注1HRESULT GetTypeInfo(    [in] UINT iTInfo,    [in] LCID lcid,    [out] ITypeInfo ** ppTInfo)调用者通过该函数取得他想要的类型库。幸好在 99% 的情况下我们都不用关心这两个函数的实现因为 MFC/ATL 都帮我们完成了默认的一个实现如果是自己完成函数代码甚至可以直接返回 E_NOTIMPL 表示没有实现。注2HRESULT GetIDsOfNames(    [in] REFIID riid,    [in,size_is(cNames)] LPOLESTR * rgszNames,    [in] UINT cNames,    [in] LCID lcid,    [out,size_is(cNames)] DISPID * rgDispId)根据函数名称取得函数序号为调用 Invoke() 做准备。所谓函数序号大家去观察双接口 IDL 文件和 MFC 的 ODL 文件每一个函数和属性都会有 [id(序号)....] 这样的描述。HRESULT Invoke(    [in] DISPID dispIdMember,    [in] REFIID riid,    [in] LCID lcid,    [in] WORD wFlags,    [in,out] DISPPARAMS * pDispParams,    [out] VARIANT * pVarResult,    [out] EXCEPINFO * pExcepInfo,    [out] UINT * puArgErr)根据序号执行函数。使用 MFC/ATL 写的组件程序我们也不必关心这个函数的实现。如果是自己写代码则该函数类似如下实现switch(dispIdMember){    case 1: .....; break;    case 2: .....; break;    ....}其实就是根据序号进行分支调用啦。(注3)     从 Invoke() 函数的实现就可以看出使用 IDispatch 接口的程序其执行效率是比较低的。ATL 从效率出发实现了一种叫“双接口(dual)”的接口模式。下面我们来看看到底什么是双接口图一、双接口(dual) 结构示意图    从上图中可以看出所谓双接口其实是在一个 VTAB 的虚函数表中容纳了三个接口因为任何接口都是从 IUnknown 派生的所以就不强调 IUnknown 了叫做双接口。我们如果从任意一个接口中调用 QueryInterface()得到另外的接口指针的话其实得到的指针地址都是同一个。双接口有什么好处那答好呀多好呀特别好呀......  使用方式因为所以脚本语言使用组件解释器只认识 IDispatch 接口可以调用但执行效率最低编译型语言使用组件它认识 IDispatch 接口可以调用执行效率比较低编译型语言使用组件它装载类型库后就认识了 Ixxx 接口可以直接调用 Ixxx 函数效率最高啦 结论 双接口既满足脚本语言的使用方便性又满足编译型语言的使用高效性。于是我们写的所有的 COM 组件接口都用双接口实现吗错否NO如果不是明确非要支持脚本的调用则最好不要使用双接口因为如果所有函数都放在一个双接口中那么层次、结构、分类不清如果使用多个双接口则会产生其它问题注4双接口、IDispatch接口只支持自动化的参数类型使用受到限制某些情况下很不方便喽还有很多弊病呦不过现在我想不起来喽......三、使用方法    如果你的开发环境是 vc6.0那么我们使用第九回中的Simple6组件为例快去下载呀......    如果你的开发环境是 vc.net 2003那么用第十回中的Simple8组件为例快去下载呀......    嘿嘿其实不下载也没有关系因为你只要下载本回的示例程序里面已经包含了所需的组件。但使用前不要忘了去注册呀regsvr32.exe simple6.dll 或 regsvr32.exe simple8.dll 注意别忘了输入组件的安装目录。注册成功后就可以使用了使用方法有  示例程序自动化组件的使用方式简要说明示例0在脚本中调用在第九回/第十回中已经做了介绍示例1使用 API 方式调用揭示 IDispatch 的调用原理但傻子才去这么使用那会累死了示例2使用 CComDispatchDriver 的智能指针包装类比直接使用 API 方式要简单多啦这个不错示例3使用 MFC 装载类型库的包装方式简单好用常用但它本质上是使用 IDispatch 接口所以执行效率稍差示例4使用 #import 方式加载类型库方式#import 方式使用组件咱们在第七回中讲过啦。常用对双接口组件直接调用自定义接口函数不再经过 IDispatch因此执行效率最高啦示例xvb、java、c#、bcb、delphi.......反正我不会自己去请教高人去吧 :-(示例一、IDispatch 调用原理篇示例二、CComDispatchDriver 智能指针包装类的使用方法示例程序中使用了 Invoke2()函数其实你根据不同的函数还可以使用 Invoke0()、Invoke1()、InvokeN()、PutProperty()、GetProperty()......等等等的确很方便。示例三、加载类型库产生包装类来使用    这个方法使用更简单一些如果你观察 MFC 帮你产生的包装类的实现你就会发现其实它调用的是 IDispatch 接口函数。使用 vc6.0 的朋友步骤如下1、建立一个 MFC 的应用程序2、开启 ClassWizard执行 Add Class选择 From a type library图二、加载类型库3、然后找到你要使用的组件文件 simple6.dll(tlb 文件也可以)选择接口后确认图三、选择类型库中需要包装的接口4、在适当的地方输入调用代码使用 vc.net 的朋友步骤如下1、建立一个 MFC 的应用程序2、执行菜单“添加\添加类”选择 MFC 分类中的“类型库中的MFC类”图四、添加类型库中的MFC类3、选择组件文件 simple8.dll(或 tlb 文件)并选择需要包装的接口图五、选择文件和接口4、在适当的位置输入调用代码示例四、使用 #import 方式调用组件    #import 方式在第七回中已经作过介绍这里就不多罗嗦了。大家下载本回的示例程序后自己去看吧。并且一定要掌握这个方法因为它的运行效率是最快的呀。四、小结    留作业啦。在我们以前所实现的所有组件程序中只添加了接口方法函数而没有添加接口属性变量你自己练习一下吧很简单的然后写个程序调用看看。其实对于 VC 来说调用属性和调用方法没有太大的区别vc 把属性包装为 GetXXX()/PutXXX()或getXXX()/putXXX()的函数方式但在另外一些语言中比如脚本语言则更方便设置属性值是对象.属性 变量或常量获取属性值是变量 对象.属性。    本回书至此做一了断更多组件设计和使用的知识且听下回分解...... 注1多个自动化接口的实现方法我们以后再说。注2将来介绍 ITypeLib::GetTypeInfo() 的时候大家再回味 IDispatch::GetTypeInfo()吧。注3在后面介绍“事件”的时候我们会自己真正去实现一个 IDispatch::Invoke() 函数。注4介绍多个双接口实现的时候会谈到这个问题。转载于:https://www.cnblogs.com/cdo/archive/2005/10/14/254638.html
http://www.yutouwan.com/news/123802/

相关文章:

  • 大兴专业网站开发公司备案域名指向一个网站
  • 建网站租服务器多少钱网站推广工作内容
  • 商业网站建设教程wordpress默认后台
  • 网站计算机培训机构哪个最好谷歌在线浏览入口
  • 房屋中介网站建设江西泰飞建设有限公司网站
  • 做外贸哪个英文网站好企业建设网站需注意哪些内容
  • 哪家培训机构学校好福州百度seo排名软件
  • 汕头手机建站模板游戏ui培训
  • 微信小程序联盟网站廊坊建设网站公司
  • 网站建设php论文微商广告推广
  • 白品网站建设房地产政策最新消息
  • 请人做网站需要多少钱肉菜配送网站建设
  • 只做网站的人员工资手机 网站 模板
  • 移动网站与pc网站雄安微网站开发
  • 临湘网站网站开发工作分解结构的树形图
  • 免费的网页网站房屋装修设计方案
  • 亚运村网站建设详细描述建设网站
  • 服务器可以做网站吗个人做网站需要什么条件
  • 对网站提出的优化建议昆明企业网站模板建站
  • 网站建设公司信息网站图片快速加载
  • 360元网站建设免费建设网站入驻
  • 网站后台管理系统 静态页面视频直播源码
  • 缅甸网站后缀之梦英语版网站怎么做
  • 网站的建设和设计方案网站建设丨下拉找金手指信誉
  • 百度网站是怎么建设的中国商务商会官方网站
  • 南昌网站建设方案维护郑州建设工程招标信息网
  • 单仁营销网站的建设黄骅港旅游景点
  • 做一个网站完整的网页张家港专业做网站
  • 东营有做网站的公司外贸软件
  • 监控系统网站开发山东前网站建设