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

COM :IUnknown接口QueryInterface函数介绍

一、COM组件的目标: COM组件的一个主要优势是:便于升级。 要实现这个优势需要满足一下两个条件: 1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。...二、COM组件的信息隐藏采用IUnknown接口来实现: 1、IUnknown接口功能简介: IUnknown意思是未知,即未知的接口。...COM对象的接口原则: 1、 对于同一个对象的不同接口指针,查询得到的Iunknow接口必须完全相同。 2、 接口对称性:对一个接口查询其自身总应该成功。...QueryInterface定义了组件,因此是COM最为重要的部分。组件所支持的接口集就是QueryInterface能够返回接口指针的那些接口。...三、COM组件新旧版本的处理: COM组件一旦发布出去,接口将永远保持不变。接口不变是指不能改变接口(IID),但是可以建立一个新的接口(同时再为接口指定一个新的IID)。

73020

COM 接口描述语言IDL

组件对象模型(COM)是微软推出的一种软件组件技术,它允许不同的软件组件在多种编程语言中被创建和调用。在COM中,接口描述语言(IDL)扮演着至关重要的角色。...IDL是一种用于定义COM接口的编程语言,它剥离了编程语言和平台的限制,促进了建立二进制的组件模型。本文将深入探讨IDL的工作原理、核心概念以及在COM中的应用案例。...每个接口都有一个全局唯一标识符(GUID),用于在COM中唯一标识该接口。属性和方法IDL允许定义属性(propget和propput)和方法(method)。...接口继承IDL支持接口继承,允许一个接口继承另一个接口的方法和属性。这使得代码可以重用并保持层次结构。接口查询客户端可以通过QueryInterface方法请求对象的不同接口。...这为.NET应用程序提供了访问大量现有COM组件的能力。WinRT与COM的互操作在Windows Runtime(WinRT)中,COM的原则被应用于新的组件模型。

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

    COM组件原理_Com组件

    COM中,接口就是一个抽象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。...这样就可以通过查询注册表中的CLSID来找到COM组件所在的dll的名称。然后调用的时候。...表明要返回这个组件的哪个接口。一般都会有IUnKnow 和IDispath接口。如果想用到IXX接口,就可以使用接口查询来转成IXX接口。...如果想使用接口调度,不包含IXX的头文件来调用IXX的方法,就可以使用IDispath接口的Invoke方法。 需要注意的是:COM可以看作一种框架,但这个框架可大可小。...所以遇到COM组件的时候不要一根筋,非要纠结这个与标准的COM的不同之处。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.6K20

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

    COM基本接口 COM中所有接口都派生自该接口: struct IUnknown { virtual HRESULT QueryInterface(REFIID riid,void **ppvObject...对象和接口的唯一标识 在COM中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。...实际上,客户成功地创建对象后,它得到的是一个指向对象某个接口的指针,因为 COM 对象至少实现一个接口(没有接口COM 对象是没有意义的),所以客户就可以调用该接口提供的所有服务。...根据 COM 规范,一个 COM 对象如果实现了多个接口,则可以从某个接口得到该对象的任意其他接口。 由此可看出,客户与 COM 对象只通过接口打交道,对象对于客户来说只是一组接口。...初始化COM环境,不用的时候使用CoUninitialize卸载COM环境,在使用接口中一般需要进行下面的步骤 1.

    1.5K30

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

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

    1.8K40

    COM简介

    COM的核心概念接口COM中,接口是一组具有特定功能的函数和方法的集合。每个接口都由一个全局唯一标识符(GUID)标识。接口定义了对象可以执行的操作,但不涉及具体的实现细节。...COM接口遵循契约式编程,即对象的实现者承诺提供接口声明的所有功能。组件和对象COM中的组件是指实现了一个或多个接口的二进制可执行代码。...在COM术语中,组件通常被称为对象。引用计数COM使用引用计数来管理对象的生命周期。当对象被创建时,其引用计数初始化为1。每当有新的客户端请求对象的接口指针时,引用计数增加。...COM的工作原理对象的创建COM对象的创建通常通过类工厂进行。类工厂是一个特殊的接口,它负责创建对象实例。...如果对象支持请求的接口,则QueryInterface返回一个指向该接口的指针,并增加对象的引用计数。如果对象不支持请求的接口,则返回E_NOINTERFACE错误。

    87700

    COM编程_第一讲_深入COM框架以及实现简单的COM

    ,可以给其他的程序使用 实现简单的COM接口设计模式开始  什么是接口模式 1.接口模式就是我们不知道,但是当用户用的时候,才知道是什么类型,所以可以是已知的,规范一下接口即可....简单来说:   简单来说就是为你的程序提供的扩展,如果用户实现了你自定义的接口,那么你的应用程序就可以支持这个功能了.所以插件和接口不要搞混  实现简单的COM以及思路 1.按照上面所说的,我们要实现COM...那么就要有一个接口,这里我用C++来写了, 2.在写的过程中,我会依次的把为什么这样写,不能怎么写都会说清楚,最后开发一个跨语言使用的ATL(也就是COM)组件 3.下面的内容可能有点多,最后我会写总结...从基本到高级的源码写出来,这样能熟悉一下COM的框架 接口设计的细节问题 (解决为什么要用Release) 1名称粉碎 .我们想一下,C语言的函数,看一下二进制或者DLL,是不是都是原本什么样子就是什么样子...总结:   说了怎么多,我们发现其实定义一个COM接口很容易,就是2个接口,(IUnknow(顶级的接口类),Ixxx(你自己的接口类))和一个实现的接口类,我们就要说怎么多细节.当然这也是为了我们更加的理解

    3.4K01

    COM的应用

    本文将探讨COM的应用,包括它在自动化、ActiveX控件、COM+、Windows Runtime以及与.NET Framework的互操作性中的使用。...COM+:组件服务的演进COM+是在COM基础上的进一步发展,它提供了更多的服务,如事务处理、负载平衡和对象池化。这些服务使得COM组件可以在分布式环境中更可靠地运行。...NET Framework与COM的互操作性.NET Framework引入了一种新的编程模型,但它仍然与COM紧密集成。通过COM互操作性,.NET程序可以调用COM组件,反之亦然。...COM在现代软件开发中的地位尽管COM已经有二十多年的历史,但它仍然在现代软件开发中扮演着重要角色。COM的原则和技术为后来的技术,如.NET和WinRT,奠定了基础。...COM的灵活性和可扩展性使得它能够在不断变化的技术环境中保持相关性。持续的创新随着技术的不断进步,COM的应用也在不断扩展。

    86000

    COM学习(四)——COM中的数据类型

    上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用。...但是根据那套规则,只能识别接口,并调用没有参数和返回类型的接口,毕竟不同语言里面的基本数据类型不同,可能在VC++中char * 就表示字符串,而在Java或者c#中string是一个对象,二者的内存结构不同...HRESULT类型: 在COM接口的返回值强制定义为该类型,用于表示当前执行的状态是完成或者是出错,这个类型一般在VC中使用,别的语言在调用时根据接口的这个值来确定接下来该如何进行。...示例Facility代码如下所示: 2 - 调度(COM调度) 3 - 存储 (OLE存储) 4 - ITF (COM/OLE 接口管理) 7 - (原始 Win32 错误代码) 8 - Windows...或者CoCreateInterface函数返回,当我们传入的ID不对它找不到对应的接口时返回该值 E_OUTOFMEMORY:当内存不足时返回该值。

    1.1K30

    QT应用编程: Qt数据类型和(ActiveX)COM接口数据类型对应关系

    QT调用COM组件方式示例: https://blog.csdn.net/xiaolong1126626497/article/details/113127300?.../112556866 QT创建的COM组件里,类里提供的公共槽函数可以直接被其他语言调用,提供信号可以被其他语言绑定为事件,数据通信非常方便。...比如: QT如果调用已经注册的COM组件,可以绑定COM组件提供的信号到自己的指定的槽函数。...C#如果调用已经注册的COM组件,可以绑定COM组件提供的信号(事件) (QT生成的COM组件,信号传递出来的参数,在C#里接收回调函数里,从事件e结构里.号可以直接取出数据)。...Qt支持作为COM组件信号和槽函数参数的数据类型如下: Qt data type COM property bool VARIANT_BOOL QString BSTR int int uint unsigned

    98530

    COM病毒实验原理

    0×01 实验内容 编译生成com病毒,用com病毒对测试文件进行感染。 0×02 实验目的 了解COM病毒的原理,掌握COM病毒的分析及其修改过程。...0×03 实验原理 COM文件是一种单段执行结构的文件,其执行文件代码和执行时内存映像完全相同,起始执行偏移地址为100H,对应于文件的偏移00H(文件头)。...MOV DS,AX MOV DX,offset message MOV AH,09h INT 21h MOV AH,4Ch INT 21h RET message db "This a simple com...17所示界面,并在test文件夹中生成了virus的可执行程序 双击virus.exe使之运行,在没有test.com文件的情况下 将test文件夹中的test.asm文件改名为test.com文件...com virus 并且一直循环 这段话意思是: 你被一种概念com通讯病毒感染了 达到一定时间就开始全窗口出现表情 用到的工具MASM

    25830

    COM 进程注入技术

    COM PROCESS INJECTION for RUST 项目地址:https://github.com/0xlane/com-process-inject Process Injection via...COM 接口调用、进程注入等方面有所帮助。...先说一下如何使用 Rust 对 COM 接口调用,调用过程可以分这几个步骤: 接口定义 调用 CoInitializeEx 初始化 调用 CoGetObject 或其他类似 API 获取接口指针 使用接口指针调用接口方法...调用 CoUninitialize 结束 重点在接口定义,后面几步都是 API 调用,对于一些有文档记录的接口一般都有对应的头文件或 IDL,直接用就行,但是对于其他 COM 接口,调用之前先要定义一个包含方法虚表的结构体...接下来理解 COM 接口方法的调用过程,COM 实际上可以理解为 RPC 的一种上层实现,所以还是 RPC,调用接口的程序称为客户端,真正处理执行调用请求的称为服务端。

    1.9K30
    领券