com组件

vc中调用Com组件的方法详解

一笑奈何 提交于 2020-03-02 06:32:34
-------------------------------------------------------------------------------- Requirement: 1.创建myCom.dll,该COM只有一个组件,两个接口IGetRes--方法Hello(), IGetResEx--方法HelloEx() 2.在工程中导入组件或类型库 #import "组件所在目录myCom.dll" no_namespace 或 #import "类型库所在目录myCom.tlb" using namespace MYCOM; --Method 1------------------------------------------------------- CoInitialize(NULL); CLSID clsid; CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid); CComPtr<IGetRes> pGetRes;//智能指针 pGetRes.CoCreateInstance(clsid); pGetRes->Hello(); pGetRes.Release();//小心哦!!请看最后的“注意” CoUninitialize(); --Method 2-----------------------------------

WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常

心不动则不痛 提交于 2020-02-11 13:48:57
原文: WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常 WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常 在wpf中封装Com组件时,调用组件的方法时抛出异常System.Windows.Forms.AxHost+InvalidActiveXStateException的异常。 通过网上查询发现,除了实例化com组件,还要将该对象进行初始化。 添加如下代码后 System.Windows.Controls.Grid CTSGrid = new System.Windows.Controls.Grid(); AxAutoTest _autoTestClass = new AxAutoTest(); //[WPF承载windows组件必须用WindowsFormsHost] System.Windows.Forms.Integration.WindowsFormsHost host = null; host = new System.Windows.Forms.Integration.WindowsFormsHost(); //

怎么通俗的解释COM组件?

北城余情 提交于 2020-01-26 04:09:21
作者:知乎用户 链接:https://www.zhihu.com/question/49433640/answer/116028598 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 GUID:全局唯一标识符,可以看成是唯一的一个ID,类似于物理网址那样。IID:也就是接口的唯一ID。C++中本没有接口的概念,是COM强行引入的,也就是一个类中全部都是纯虚函数,这样的类称为接口(interface),微软甚至定义了一个宏,大概就是这样:#define interface struct;IUnknown接口:这个解释起来会比较麻烦。如 @灵剑 所说,当自己写的一个dll升级的时候,内部可能增加了成员,导致分配的空间发生变化,从而使得次dll和以前的dll不能兼容。这个就是臭名昭著的dll hell,为此微软最开始想了个很挫的方法,那就是在dll后面加上自己的版本号,如:myDll_1.dll, myDll_2.dll……如果你打开system32目录看看就知道是怎么回事了。但是这样总不是一个办法,假如有个实现类MyClass,我这样操作:MyClass* ptr = new MyClass(); MyClass可能在不同dll版本中占的空间不同产生兼容问题,我拿一个指向MyClass的指针调用方法也会产新问题,那么,如果是指向一个接口(只含有纯虚方法

CORBA、IDL、COM和Protocol Buffer

北慕城南 提交于 2020-01-20 01:29:42
1.CORBA CORBA是一种标准,是公共对象请求代理结构(Common Object Request Broker Architecture),是由对象管理组织(Object Management Group,缩写为OMG)标准化的一种规范体系。 对象管理组织是一个国际的非盈利组织,其职责是为应用开发提供一个公共框架,制订工业指南和对象管理规范。OMG是由包括IBM、Sun Microsystem、Apple和美国航空等11家公司在1989年创立的,其最初目的是开发一个分布式面向对象系统的标准。目前,对象管理组织拥有800多名公司成员,包括计算机产业和软件产业的企业,也包括其他产业的成员。 CORBA的三大核心模块为接口描述语言(或者叫接口定义语言,Interface Definition Language),对象请求代理(Object Request Broker) 和 IIOP标准(网络ORB交换协议, Internet Inter ORB Protocol)。 CORBA目前可以理解为一个Web Service。CORBA的两个重要特征是: 1)分布式系统下的跨语言的数据传输; 2)远程方法的本地调用。 2.IDL CORBA的最核心的模块为接口定义语言,即Interface Difinition Language,简写为IDL

关于COM+的一些回顾

谁说我不能喝 提交于 2020-01-16 06:59:17
今天继续在讲解SOA技术实现方面的课程,这一周主要讨论的是WCF。既然讲到WCF,难免要提一下在其之前的有关技术。其中COM+我认为是非常值得回顾的。 COM+技术所能提供的功能 1、事务服务:它确保了在分布式系统中的数据完整性。 2、安全服务:它的安全模型提供了处理安全性而不用编写任何代码的方法。 3、同步服务:提供了有效管理地解决组件中并发问题的方法,但却不用编写代码。 4、资源管理:(包括资源管理器和资源分配器)管理数据库连接、网络连接和内存等。 5、JIT激活:即(Just In Time)是从MTS继承下来的一项服务,当客户调用时才将该对象的一个实例保持为活跃状态并缓存在服务器内存中,使用完对象后,会通知MTS环境可以释放该对象所占用的资源了,如数据库连接。 6、对象池:提供一个线程池来存放现成的对象,以供下次再用,是系统的一项自动服务。当有应用程序访问COM+组件时,即为应用程序创建该组件的一个实例并存放在对象池中,应用程序关闭后即销毁实例,可以自由配置组件使它的实例在池中的状态,实现了实例的重用性,提高应用程序的性能和伸缩性。 7、基于角色的安全:这个容易理解,即验证角色,给予安全许可,给不同的用户予不同的权限。 8、队列组件(MSMQ):提供异步消息队列,可以自动按其形式将数据转换成数据包。 9、共享属性管理器(SPM):用来管理存储在内存中的对象状态信息

VC++、MFC、COM和ATL的区别

有些话、适合烂在心里 提交于 2020-01-15 23:58:00
From: http://hi.baidu.com/huqingshuye/blog/item/c55bd12ca5fa1b5b4ec2263f.html 一、什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的 IDE,WS,PlatForm, MFC同 BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的)。MFC是Win API与C++的结合。 最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行)中实现内部处理的类,如数据库的管理类等。 二

COM/DOM/COM+

一世执手 提交于 2020-01-15 04:48:21
一 COM 组件对象模型(COM),是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。 COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。

net下开发COM+组件(一)

北慕城南 提交于 2020-01-08 06:45:36
阅读提示: 本文介绍了在.net下如何开发COM+组件,并以实例相附 一、问题的提出 1、最终用户的每次请求,都将读取Mapping文件--可以通过缓存解决; 2、xxx子系统需要不断的写入Mapping文件--也可以先写入内存然后批量写入文件解决; 二、分析解决问题 由于分别有2个或更多子系统需要对同一文件进行读写操作,而客户端又有很大的并发性,所以极可能出现读写冲突或错误,也必将影响系统的性能。 通过调用共同的进程外组件的方式来读写文件;而这个共同的进程外组件只有在自身启动的时候把文件内容load到内存,当文件有变化时更新内存。 三、COM+组件介绍 早在window2000发布时就已经产生了COM+,并集成在操作系统中,在运行的时候是以服务的形式存在的。COM+增加了一系列的MTS(一种系统服务,用于管理数据库中的持久性数据,也处理在事务中的持久性消息队列和文件系统)服务: 1、事务服务:它确保了在分布式系统中的数据完整性。 2、安全服务:它的安全模型提供了处理安全性而不用编写任何代码的方法。 3、同步服务:提供了有管理地解决组件中并发问题的方法,但却不用编写代码。 4、资源管理:(包括资源管理器和资源分配器)管理数据库连接、网络连接和内存等。 5、JIT激活:即(Just In Time)是从MTS继承下来的一项服务

如何编写和注册.Net的Com组件

你。 提交于 2020-01-08 04:37:13
Com+组件在vb6.0和vc++的年代是风靡一时的,当前.net framework的构件系统,因为其无需注册等优点渐渐取代了Com+的地位,但一些系统由于历史问题,还是需要com+支持的,其实在.net中编写com+组件也是一件非常简单的事情. 在vs2003中,要想生成com+组件,其实额外的工作只有一个,就是对项目按下图所示, 程序其他部分和其它没有差别,不再赘述 重点在于如何注册.net写的com+组件 网上有一些说法,但我按照其操作,均未成功,或者在程序访问的时候,出现权限问题。其实.net 写的com+组件不能直接用regsvr32.exe来注册,因为这样一来,系统会缺少元数据,我们首先需要用.net framework提供的工具regasm,将该com组件所需元数据写入注册表中,注册表允许 COM 客户程序以透明方式创建 .NET Framework 类。类一经注册,任何 COM 客户程序都可以使用它,就好像该类是一个 COM 类。在编译好的目录中,com组件会多产生一个同名的.tlb文件,regasm的用法如下:regasm /tlb: /tlb:Encrypter.tlb Encrypter.dll,此步骤经过我的实验,不可或缺。 然后,就可以利用组件服务将.net com组件设置为com服务了。设置过程中,需要注意下权限的设置就行了。 有关tlb文件的说明如下

.NET组件 vs. COM组件

ぃ、小莉子 提交于 2019-12-28 09:28:12
写在前面:我没有开发过COM组件的经验,只是在做文献综述的时候需要了解这方面的知识,所以如果哪里说错了或者是我理解错了,还希望大家可以指出,谢谢。我不是程序员也不是计算机专业,只是课题偏了这个方向,因此很多基础概念或许有理解错,真心希望可以得到大家的指正,再次感谢。 COM object以接口的方式向客户端提供服务。一个COM component可以包含多个COM object,一个COM object可以有多个接口,其关系如图1所示。 图1 COM组件、COM对象和接口关系 在Windows OS上,COM组件以.dll或者.exe的文件形式存在。其中.dll是进程内组件(in-process component),.exe是进程外组件(out-process component)。进程内组件意味着该组件会被加载到客户端所在的进程中,而进程外组件则意味着该组件会被加载到一个新的进程中。 二进制接口是COM组件中的重要概念,正是因为存在binary interface compatibility, 组件的开发语言不受限制,不一定非得是C/C++。接口是用Microsoft Interface Definition Language (MIDL)描述的。每个接口有唯一标识,使用IID(interface identifier)命名。接口都需要继承自IUnknown接口