COM
henry000
这个作者很懒,什么都没留下…
展开
-
COM编程技术基础之三
<br />包容与聚合<br /> <br /> 与所有面向对象的系统一样,COM组件的可重用性是其很重要的一个特性。与C++类在原代码级别的重用不同,COM组件的重用是建立在对二进制代码重用的基础上的。具体包括包容(containment)和聚合(aggregation)两种重用模型。这两种重用机制非常相似,其本质也都是在一个组件中对另外一个组件的使用。<br /> 在包容机制中,外部组件除了实现自己的接口外,还包含了指向内部组件所有接口的指针,使内部组件接口相对于外部组件转载 2010-11-23 13:30:00 · 589 阅读 · 0 评论 -
COM组件的运行机制,即COM是怎么跑起来的
这部分我们将构造一个创建COM组件的最小框架结构,然后看一看其内部处理流程是怎样的IUnknown *pUnk=NULL; IObject *pObject=NULL; CoInitialize(NULL); CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IUnknown,转载 2011-11-25 10:41:48 · 1373 阅读 · 0 评论 -
ATL 实现COM
ATL实现COM 感觉是目前最简单的编程方式了。原创 2011-11-25 10:09:11 · 829 阅读 · 0 评论 -
dispinterface接口、Dual接口以及Custom接口
自动化接口就是用IDispatch实现的接口。它的好处就是脚本语言象VBScript、 JavaScript也能用COM组件了,从而基本上做到了与语言无关它的缺点主要有两个,第一个就是速度慢效率低。这是显而易见的,通过虚函数表一下子就可以调用函数了,而通过Invoke则等于中间转了道手续,尤其是需要把函数参数转换成一种规范的格式才去调用函数,耽误了很多时间。所以一般若非是迫不得已我们都想用VTab转载 2011-11-25 10:36:05 · 1084 阅读 · 0 评论 -
error MIDL2025 : syntax error : expecting a type specification near "HRESULT"解决办法
在vc6.0用ATL建立一个COM组件,然后在接口定义中加入方法,会遇到编译错误:(1)error MIDL2025 : syntax error : expecting a type specification near "HRESULT"(2)error MIDL2026 : cannot recover from earlier syntax errors; aborting com转载 2011-11-24 18:13:07 · 6620 阅读 · 1 评论 -
IUnknown接口
一: 接口定义 任何一个接口都是继承于IUnknown接口。 客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是Iunkown,它的定义包含在Win32 SDK中的UNKOWN.h头文件中。interface IUnkown{ virtual HRESULT __stdcall QueryInterface(转载 2011-11-24 14:58:02 · 1286 阅读 · 0 评论 -
虚拟函数表和C++抽象基类
一.虚拟函数表 为什么用C++的纯抽象基类来实现COM接口是可行的呢?这主要是由于纯抽象类说定义的内存结构可以满足COM对接口的需求。当定义一个纯抽象基类时,实际上定义的是一个内存块的结构,且其所有的实现都是一些具有相同的基本结构的内存块。但是,此内存只有在派生类中实现此抽象基类时才会被分配。继承抽象基类的派生类,也将继承此内存结构。interface IX{ vir转载 2011-11-24 14:40:53 · 946 阅读 · 0 评论 -
创建COM组件全过程(C++)
一:创建一个接口 typedef struct InterfaceInterface ISimpleMsgBox : public IUnknown{ // IUnknown STDMETHOD_(ULONG, AddRef)() PURE; STDMETHOD_(ULONG, Release)() PURE; STDM转载 2011-11-24 16:00:53 · 17453 阅读 · 1 评论 -
类厂IClassFactory和组件的创建
CoCreateInstance是创建组件时使用得最多的一种方法,但由于其灵活性不足以满足所有组件的需求,因此引入了类厂。所有的组件都是类厂创建的。CoCreateInstance实际上也是按照一般发方法通过类厂来创建组件的。当客户直接使用类厂时,将能够获得更高的灵活性。1. CoCreateInstance函数此函数需要一个CLSID参数来创建相应组件的一个实例,并返回此实转载 2011-11-24 15:30:18 · 2770 阅读 · 0 评论 -
引用计数和AddRef、Release
IUnknown 的另外两个方法: 即AddRef和Release方法.用这两个方法可以有效的管理组件的生命周期。一.引用计数三大规则 1.在返回接口指针时调用AddRefIUnknown* CreateInstance(){ IUnknown* pI = static_cast(new CA) ; pI->AddRef() ; retur转载 2011-11-24 15:20:25 · 3841 阅读 · 0 评论 -
COM编程技术基础之二
<br />COM接口与COM组件<br /> COM接口是COM规范中最重要的部分,COM规范的核心内容就是对接口的定义,甚至可以说“在COM中接口就是一切”。组件与组件之间、组件与客户之间都要通过接口进行交互。接口成员函数将负责为客户或其他组件提供服务。与标识COM对象的CLSID类似,每一个COM接口也使用一个GUID来进行标识,该标识也被称为IID(interface identifier,接口标识符)。<br /> COM接口实际限定了组件与使用该组件的客户程序或其他组件所能进行的交互方式,任转载 2010-11-23 12:33:00 · 665 阅读 · 0 评论 -
COM编程技术基础之一
<br />COM编程技术基础之一<br /><> <br />前言 <br /> 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。<br /> 显然,在COM规范下将能够以高度灵活的编程手段来开发、维护应用程序。可以将一个单独的复杂转载 2010-11-23 09:26:00 · 846 阅读 · 0 评论 -
COM :IUnknown接口QueryInterface函数介绍
<br />一、COM组件的目标:<br />COM组件的一个主要优势是:便于升级。<br />要实现这个优势需要满足一下两个条件:<br />1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。<br />2、为了更好的突出DLL的优势,还需要信息隐藏,即封装性。<br />二、COM组件的信息隐藏采用IUnknown接口来实现:<br /> 1、IUnknown接口功能简介:<br />IUnknown意思是未知,即未知的接口。采用这个名字是为了简单起见,所有的COM接口都需要继承I转载 2010-11-23 09:14:00 · 910 阅读 · 0 评论 -
VS链接错误:"PRJ0050 Failed: Failed to register output"
错误信息>>Project : error PRJ0050: Failed to register output. Please ensure you have the appropriate permissions to modify the registry.解决办法>>There are three possible causes. Diagnosis is usually st转载 2012-04-22 16:23:29 · 4576 阅读 · 1 评论