首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

COM :IUnknown接口QueryInterface函数介绍

一、COM组件的目标: COM组件的一个主要优势是:便于升级。 要实现这个优势需要满足一下两个条件: 1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。...由于所有的COM组件接口都从IUnknown接口继承,因此所有的接口都有QueryInterface函数,通过QueryInterface可以查询到任何接口,因此也就不需要单独维护一个代表组件的指针。...三、COM组件新旧版本的处理: COM组件一旦发布出去,接口将永远保持不变。接口不变是指不能改变接口(IID),但是可以建立一个新的接口(同时再为接口指定一个新的IID)。...2、建立一个新版本的时机: 为了使COM处理多个版本的机制能够起作用,当下列条件中的任何一个改变时,就应给新接口指定新的IID: 、接口中函数的数目。 、接口中函数的顺序。...、某个函数的参数。 、某个函数的参数顺序。 、某个函数的参数类型。 、函数可能的返回值。 、函数返回值的类型。 、函数参数的含义。 、接口中函数的含义。

78420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    COM组件原理_Com组件

    在COM中,接口就是一个抽象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。...这就形成了一个COM组件,当然组件一般是一个钻石继承的样子,这里为了简化原理把他们当成一个串形继承下来。...这样就可以通过查询注册表中的CLSID来找到COM组件所在的dll的名称。然后调用的时候。...会调用DllGetClassObject()函数, 这个函数中第一个参数是CLSID,表明想要调用DLL中的哪个组件(需要提醒的是,一个DLL中不一定只有一个组件)。第二个参数为IID。...所以遇到COM组件的时候不要一根筋,非要纠结这个与标准的COM的不同之处。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.8K20

    COM学习(一)——COM基础思想

    COM是基于组件化编程的思想,在COM中每一个组件成为一个模块,它可以是动态链接库或者可执行文件,一个组件程序可以包含一个或者多个组件对象,COM对象不同于OOP(面向对象)中的对象,COM对象是定义在二进制机器代码基础之上...接口是一组逻辑相关的函数的集合,比如一组处理URL的接口,处理HTTP请求的接口等等。在习惯上接口通常是以”I”开头。对象通过接口成员函数为客户提供各种形式的服务。...而CLSID的定义如下: typedef GUID CLSID; 其实在COM中一般涉及到ID的都是GUID,只是利用typedef另外定义了一个名称而已 另外COM也提供了一组函数用来对GUID进行操作...在最后分别调用各个接口的Release函数,释放接口 下面提供一个小例子,以供参考,也方便更好的理解COM //组件部分 extern "C" __declspec(dllexport) void...这里为了模仿COM的使用定义了ComInitialize和ComUninitialize这两个函数,真实的初始化函数怎么写的,我也不知道,在这里只是为了模仿COM的使用。

    1.8K30

    COM学习(三)——COM的跨语言

    COM是基于二进制的组件模块,从设计之初就以支持所有语言作为它的一个目标,这篇文章主要探讨COM的跨语言部分。...idl文件 一般COM接口的实现肯定是以某一具体语言来实现的,比如说使用VC++语言,这就造成了一个问题,不同的语言对于接口的定义,各个变量的定义各不相同,如何让使用vc++或者说Java等其他语言定义的接口能被别的语言识别...,它的定义与类的定义相似,其中函数定义需要修饰函数各个参数的作用,比如使用in 表示它作为输入参数,out表示作为输出参数,retval表示该参数作为返回值,一般在VC++定义的接口中,函数返回值为HRESULT...DllCanUnloadNow:函数用来询问是否可以卸载对应的dll,一般在COM中有两个全局的引用计数,用来记录当前内存中有多少个模块中的类,以及当前有多少个线程在使用它,如果当前没有线程使用或者存在的对象数为...至此从结构上说明了为了实现跨语言COM组件内部做了哪些工作,当然只有这些工作是肯定不够的,后面会继续说明它所做的另一块工作——提供的一堆通用的变量类型。

    2K40

    VFP低级文件函数读写串口,com10出错?

    vfp低级函数读写串口 Declare Sleep In WIN32API Intege hfile=fopen("com1") fwrite(hfile,"123456") sleep(100...如果用fopen("com10")即会卡死,微软预定义的标准设备中含有“COM1”-“COM9”。所以,“COM1”-“COM9”作为文件名传递给函数时操作系统会自动地将之解析为相应的设备。...但对于COM10及以上的串口,“COM10”之类的文件名系统只视之为一般意义上的文件,而非串行设备。...为了增加对COM10及以上串行端口的支持,微软规定,如果要访问这样的设备,应使用这样的文件名(以COM10为例):\\.com10 既串口名就是文件名,如果是10以上就要规范的写法了。...如fopen("\\.com10") 你学会了吗?

    28910

    「基础编程学习」 「PHP7数组详解」:第1章 (7)函数及异常处理

    # 1.12 函数 之前在输出学生程序,用作文本渲染的时候,我们使用了check_score($score)这样的函数,用于封装功能。 大家应该有个初步的认识。...函数,是一个运算过程,封装起来,多处调用。可以有效地使程序简洁起来,更富于可读性。 还是用实例让大家有个深入的了解。 ?...function关键词声明,后面是函数的标识符get_bonus_goods,然后是形参$type_id。函数体内部,执行需要的运算。 然后,函数可以有返回值,也可以没有。...Laravel的helper函数。简单封装一下,调用reset返回数组的第一个值。因为reset名字不好记,使用head倒是直观许多。 ? 判断是否windows平台。...函数,要做最小化封装。功能尽量单一,可拆卸,灵活小巧。 尽量不要写一大堆代码,一大堆功能,严重依赖,一处用过,没有它用。那样的函数,不过是一堆代码,换个放的地方而已。

    41510

    COM简介

    COM定义了如何创建、使用和管理软件组件,这些组件可以在不同的应用程序之间共享。本文将深入探讨COM的基本概念、工作原理、以及它在现代软件开发中的应用。...COM的核心概念接口在COM中,接口是一组具有特定功能的函数和方法的集合。每个接口都由一个全局唯一标识符(GUID)标识。接口定义了对象可以执行的操作,但不涉及具体的实现细节。...COM接口遵循契约式编程,即对象的实现者承诺提供接口声明的所有功能。组件和对象COM中的组件是指实现了一个或多个接口的二进制可执行代码。...COM的工作原理对象的创建COM对象的创建通常通过类工厂进行。类工厂是一个特殊的接口,它负责创建对象实例。...NET Framework尽管.NET Framework引入了新的编程模型,但COM仍然是.NET的一个重要组成部分。.NET中的COM互操作性允许.NET程序集与现有的COM组件进行交互。

    3.4K00

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券