组件英文单词怎么写

怎么写com组件

1.如何开启com组件

COM component(COM组件) COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。

在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。

COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。

开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。

并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。

并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。 COM所含的概念并不止是在Microsoft Windows操作系统下才有效。

COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。

一个应用程序通常是由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。

操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。 目前这种状况已经发生变化。

开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。

此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。

传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。

一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。

自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。

COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。 使用组件的优点: 组件架构的一个优点就是应用可以随时间的流逝而发展进化。

除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。 使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。

为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。

补充:COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。

COM组件可以给应用程序、操作系统以及其他组件提供服务;自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序;COM组件可以动态的插入或卸出应用。 恶意网站可以利用含有漏洞的com组件接口,下载木马,并且执行; 禁用com组件一般是指设置了Kill位,即IE浏览器不能使用这个组件,通俗讲:通过设置Kill位,可以使InternetExplorer在使用默认设置时永不调用被禁用的com组件,从而禁止该控件在Internet Explorer中运行。

禁用含有漏洞的com组件后,IE就不能调用含有漏洞的COM组件;黑客利用有漏洞的COM组,写成的网页代码就不能在IE中被执行,木马等将不会被下载。 禁用com组件可能导致的问题: 在线播放功能的组件被禁用,会导致在线电影等在线视频无法正常观看; 在线杀毒功能的组件被禁用,会导致在线杀毒不能使用; 在线游戏功能的组件被禁用,会导致在线游戏无法玩, com组件禁用后的具体情况,需要根据具体的com组件功能作判断。

手动启动COM组件操作方法: 运行——regedit——找到被禁用的com组件对应的clsid|注册表键值——删除具体值,或者整个键。

2.DELPHI怎样编写COM组件

那这个规范是什么呢,最简单的,就是按规定使用接口,微软定了个IUnkown接口,只要实现了这个接口的类,就可以称为COM组件。

在此基础上可以加上自己的接口,实现特定的功能,这就成了有用的COM组件了。 2、DELPHI中如何创建COM组件 两个步骤: (1)创建一个ActiveX Library,这是个DLL (2)创建一个COM Object或者Automation Object,二者选其一,这两者都是COM组件,但是当然还是有区别的,差在调用的方法上,这个后面再说 3、DELPHI中如何调用COM组件 两种方法,分别是用接口来调和用名称来调,第一种适用于支持接口的语言,如C、DELPHI,VB就不行了,好处是速度快,因为不用根据名称去查找了,还有开发时编译器能检查,缺点是要导入类型库。

第二种适用于所有的语言,好处是不用导入类型了,缺点是调用的速度慢,还有开发时编译器不检查。 前面说的COM Object只能通过第一种方法调,Automation Object两种方法都可以调。

举例如下: 我创建了一个ActiveX Library,名叫mylib。一个Automation Object,名叫myobj。

并且编译注册过了。 用第一种方法调用时,需要如下操作:在use里加上mylib_TLB类型库(如果不是自己开发的没有TLB可以从DLL导入生成的),代码是var myobj:Imyobj;myobj=Comyobj.create();之后就可以用了。

如果有兴趣可以看看类型库的代码里,Comyobj.create里调用了CreateComObject,这函数返回的是IUnkown接口,再用as操作转成你需要的Imyobj接口。 用第二种方法不需要类型库了,代码是var myobj:variant;myobj=CreateOleObject('mylib.myobj');之后就可以用了,这个方便吧。

3.用C++编写一个com组件,组件上有接口,怎么编

下面提供一个完全用C++实现的进程内(DLL)COM服务器,不要ATL或MFC提供任何支持。

用这种方式编写COM对象可以让你深入地洞察到COM处理进程内服务器的方法以及COM是如何创建类工厂的。利用本文提供的这个简单框架你可以实现很基本的COM组件,如外壳扩展(Shell Extensions)等。

以下是用本文所说的方式编写自己的COM对象要经过的步骤: 第一步:写一个头文件,这个头文件包含以下内容: 1、包含文件comdef.h:#include 。 2、定义COM服务器的GUID。

_declspec(selectany) GUID CLSID_Mine = { 0xdc186800, 0x657f, 0x11d4, {0xb0, 0xb5, 0x0, 0x50, 0xba, 0xbf, 0xc9, 0x4} }; 3、给出接口的IID以及这个接口要实现的方法定义。到时客户端会用到这个接口的IID和接口的方法。

interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904")) ImyInterface : public IUnknown { STDMETHOD(Square)(long *pVal)PURE; STDMETHOD(Cube)(long *pVal)PURE; }; 客户端使用此接口: HRESULT hr; ImyInterface *pmine=(0); hr = CoCreateInstance(CLSID_Mine, // COM 服务器的CLSID NULL,//不支持聚合 CLSCTX_INPROC_SERVER, // 是个DLL __uuidof(ImyInterface), // 接口的IID (void**)&pmine ); 还有一种方法可以从注册表中获得COM对象的CLSID,就是调用CLSIDFromProgId()函数,不过必须把组件的ProgId传递给这个函数。 第二步:必须为所定义的接口提供实现,本文用的方法是创建一个从接口继续的新类: // 这个类实现单接口ImyInterface 。

// // class CmyInterface : public CComBase , public InterfaceImpl { public: CmyInterface(); virtual ~CmyInterface(); // 我们必须要为QueryInterface 编写代码 STDMETHOD(QueryInterface)(REFIID riid,LPVOID *ppv); // ImyInterface 接口方法 STDMETHOD(Square)(long *pVal); STDMETHOD(Cube)(long *pVal); }; 模版类InterfaceImpl提供接口引用计数的实现。在此我们可以用多接口继续,那样就能在一个COM组件中实现多个接口。

第三步:在完成这个对象之前,我们还要编写Queryinterface和两个接口方法: STDMETHODIMP CmyInterface::QueryInterface(REFIID riid,LPVOID *ppv) { *ppv = NULL; if(IsEqualIID(riid,IID_IUnknown) IsEqualIID(riid,__uuidof(ImyInterface))) { // 因为我们从ImyInterface继续,所以要进行强制类型转换 *ppv = (ImyInterface *) this; _AddRef(); // 这个方法从某个基类继续而来 return S_OK; } return E_NOINTERFACE; } STDMETHODIMP CmyInterface::Square(long *pVal) { long value = *pVal; *pVal = value * value; return S_OK; } STDMETHODIMP CmyInterface::Cube(long *pVal) { long value = *pVal; *pVal = value * value * value; return S_OK; } 注重这里使用了__uuidof(ImyInterface)来获取接口的IID,这是因为我们已经在第一步中将这个接口关联到了某个uuid。 最后一步:COM 组件的DLLs必须输出一个叫DllGetClassObject的函数。

由这个函数为CmyInterface创建类工厂并返回一个对它的引用。然后我们调用CoCreateInstance为进程内COM创建类工厂,接着调用DllGetClassObject。

这个类工厂有一个方法是CreateInstance,由这个方法创建对象并返回对它的引用。 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut) { *ppvOut = NULL; if (IsEqualIID(rclsid, CLSID_Mine)) {// 为CmyInterface类声明类工厂 CClassFactory *pcf = new CClassFactory; return pcf->QueryInterface(riid,ppvOut); } return CLASS_E_CLASSNOTAVAILABLE; } 在此我们要检查所请求的CLSID是不是CLSID_Mine,假如不是则返回一个错误代码。

你可能会问在哪里创建实际的CmyInterface类对象,实际上这是由CClassFactory的模板实例来处理的。以下是CClassFatory的实现: // CSingleCreator 用于单实例类工厂,这个类为多个CreateObject请求返回相同的对象指针.. template class CSingleCreator { protected: CSingleCreator():m_pObj(0) {}; comObj *CreateObject() { if(!m_pObj) { m_pObj = new comObj; } return m_pObj; } comObj * m_pObj; }; // CMultiCreator 用于常用类工厂,这个类为每一个CreateObject请求返回新的对象指针.. template class CMultiCreator { protected: CMultiCreator():m_pObj(0) {}; comObj *CreateObject() { return new comObj; } comObj * m_pObj; }; //ClassFactory类实现 // MultiCreator是缺省的类工厂创建者 //这个类实现了接口IclasFactory。

class CClassFactory : public CComBase, public InterfaceImpl, public creatorClass { public: CClassFactory() {}; virtual ~CClassFactory() {}; STDMETHOD(QueryInterface)(REFIID riid,LPVOID *ppv) { *ppv = NULL; if(IsEqualIID(riid,IID_IUnknown) IsEqualIID(riid,IID_IClassFactory)) { *ppv = (IClassFactory *) this; _AddRef(); return S_OK; } return E_NOINTERFACE; } STDMETHODIMP CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) { *ppvObj = NULL; if (pUnkOuter) return CLASS_E_NOAGGREGATION; m_pObj = CreateObject(); 。

4.如何编写 VC++代码来使用COM组件

为了帮助读者更快地体会到使用VC++编写COM client的效果,我建议您从上诉链接中下载最新的release,并按照如下步骤搭一个简单的测试环境:

Step1. 使用Visual Studio 2008打开CodeFx的solution文件(Visual Studio需要run as admin)。

Step2. Build其中的CppCOMClient和MFCCOMClient示例。由于项目依赖性的设置,这两个VC++ example所依赖于的COM组件(CSDllCOMServer, ATLDllCOMServer, ATLExeCOMServer)也会被编译并注册。

Step3. 直接运行CppCOMClient,并得到如下输出。CppCOMClient演示的是使用native C++来创建和使用进程内COM组件。这个COM组件既可以是用native代码写的,也可以是用.NET语言写的。

Step4. 直接运行MFCCOMClient,并得到如下输出。MFCCOMClient演示的是使用MFC的class wizard来创建并使用一个进程外的COM组件。

简单的测试到此结束。下面我们来看看编写一个VC++的程序来使用COM组件的一般方法:方法一:直接使用COM API,例如,CoCreateInstance以及IDispatch接口中定义的方法GetIDsOfNames,Invoke来创建和使用COM组件。当然,前提是那个COM组件支持IDispatch。CodeFx/CppCOMClient/RawAPI.cpp是该方法所对应的例子。

方法二:使用VC++的#import directive,导入目标COM组件的type library并自动生成一套包装好的强类型的类和智能指针。这极大程度地方便了开发人员,因为生成的类和智能指针将复杂的COM API,类型转换等内容都隐藏了起来,同时开发者还可以受益于Visual Studio的intellisense。CodeFx/CppCOMClient/ImportDirective.cpp是该方法所对应的例子。另外,值得注意的是,这个例子演示了使用一个.NET 写的COM组件(CSDllCOMServer)。对于.NET写的COM组件,我们额外需要#import mscorlib.tlb。

方法三:如果您开发的程序支持MFC,那您将更大程度地得益于MFC强大的class wizard。这个class wizard将方法二中的#import directive都封装隐藏了。您只需轻点几下鼠标,便可以无缝透明地创建和使用COM组件,就好像他是一个普通的class一般。

5.C#中怎么使用C++写的COM组件

1、新建一个C# console项目,比如叫Test(winform的也是一样道理,只是Console调试更方便而已。

第一次在C#中调用COM组件时,建议先用Console试试,否则会搞得一头烟)2、添加引用:在弹出的对话框中选COM子页,找到ATLProjectTest 1.0类型库(或类似的东西)就会发现在Test->引用下多了ATLProjectTestLib3在主函数(program.cs)中调用组件using System;using System.Collections.Generic;using System.Linq;using System.Text;using ATLProjectTestLib;namespace Test{ class Program{ static void Main(string[] args){ATLProjectTestLib.FunTestClass f1 = new FunTestClass();Console.Write (f1.Sum(3,4));}} }。

怎么写com组件

转载请注明出处育才学习网 » 组件英文单词怎么写

知识

罗梅芬用日文怎么写(罗钰潇日语怎么写)

阅读(21446)

本文主要为您介绍罗梅芬用日文怎么写,内容包括伊蕾娜日语怎么写,王雪菲用日文怎么说,张佳怡在日语中怎么写啊怎么读啊。罗 ら ラ ra钰 ぎょく ギョク gyoku潇 しょう シヨウ shou第一列:日语汉字,写法同汉字,都要用繁体,这三个都挺难写的,看

知识

邓先生的英文怎么写(1~40的英文怎么说)

阅读(10466)

本文主要为您介绍邓先生的英文怎么写,内容包括“邓先生”用英语怎么写,1~40的英文怎么说,漂亮英文beautiful缩写怎么写。1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 8 nine 10 te

知识

一个人布满皱纹怎么写(描写人物皱纹的句子)

阅读(9545)

本文主要为您介绍一个人布满皱纹怎么写,内容包括描写人物皱纹的句子,描写人物皱纹的句子,皱纹怎么描写。、老人脸上布满了皱纹,那一条条曲折不均的像是墙上斑驳的印迹,爬满了面容,留下了岁月的痕迹。2、外祖父是一位年过六旬的白发老人。在他

知识

登录接口怎么写(php登录的接口怎么写)

阅读(7783)

本文主要为您介绍登录接口怎么写,内容包括php登录的接口怎么写,网页登陆接口怎么做,网站登录接口程序怎么做。PHP 接口 接口 使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。我们可以通过int

知识

档案奖惩情况怎么写(奖惩情况怎么写)

阅读(9621)

本文主要为您介绍档案奖惩情况怎么写,内容包括奖惩情况怎么写,个人简历及奖惩情况怎么填写,个人简历里面奖惩情况怎么写。在简历里的“奖励”部分,列出与你所获得的并与你的求职目标相关的荣誉、奖励和奖金。你既可以按时间顺序排列,也可以按

知识

头孢克肟拼音怎么写(头孢克肟的肟念什么)

阅读(8023)

本文主要为您介绍头孢克肟拼音怎么写,内容包括头孢克肟片全名拼音,头孢克肟片全名拼音,头孢克肟的肟念什么。肟[wò] :是含有羰基的醛、酮类化合物与羟胺作用而生成的有机化合物,可以参与许多有机化学反应,例如经典的Beckmann重排就是肟为底

知识

一库搜用日语怎么写(日语一库是什么意思)

阅读(8026)

本文主要为您介绍一库搜用日语怎么写,内容包括日语大神来,看动漫里的主人公说一句:恰,一库搜这是什么意思,一库一库;一搜库这两个日语是什么意思怎么写,看片都有“一库”(日语)是什么意。一库的意思就是“出发,出去”的意思。日语「行く」的音译

知识

外租无人机广告怎么写(植保无人机广告语)

阅读(7021)

本文主要为您介绍外租无人机广告怎么写,内容包括求一个无人机创意广告词谢谢巨友们了,求一关于无人机的广告标语,求一关于无人机的广告标语我们公司是做无人机的,新成立的公司,求。DJI大疆创新研发的的MG-1农业植保机专为农村作业环境设计,

知识

河南话que怎么写(河南话的nenna怎么写)

阅读(6550)

本文主要为您介绍河南话que怎么写,内容包括que怎么写,河南话的nenna怎么写,que怎么写。尿一壶(niào yī hú)关系密切,观点一致。例:“他俩今天尿一壶啦。”●尿(niào)⑴、从尿道排泄的液体。⑵、排泄小便。⑶、不放

知识

国学经文的论文怎么写(国学征文该怎么写)

阅读(7140)

本文主要为您介绍国学经文的论文怎么写,内容包括国学征文该怎么写,弟子规的400论文,关于国学经典的征文怎么写。“子曰:“温故而知新,可以为师”……小时,总是觉得国学就是没用的,古人写的话,我们还需要背,每次老师教给我们时,我总是会让思想开一

知识

化学实验总结怎么写(化学实验报告小结怎么写)

阅读(5418)

本文主要为您介绍化学实验总结怎么写,内容包括化学实验总结怎么写,化学实验报告小结怎么写,化学实验小结怎么写。化学实验报告的书写: 一般情况下化学实验报告是根据实验步骤和顺序从七方面展开来写的: 1.实验目的:即本次实验所要达到的目标或

知识

蝴蝶豌豆拼音怎么写(豌豆的拼音是什么)

阅读(5845)

本文主要为您介绍蝴蝶豌豆拼音怎么写,内容包括蝴蝶怎么拼音的,豌豆的拼音是什么,蝴蝶的拼音是什么。豌豆的拼音是[wān dòu]。豌豆是豆科一年生攀援草本,高0.5-2米。全株绿色,光滑无毛,被粉霜。叶具小叶4-6片,托叶心形,下缘具

知识

海绵宝宝用英文怎么说(海绵宝宝用英文怎么说)

阅读(6532)

本文主要为您介绍海绵宝宝用英文怎么说,内容包括海绵宝宝用英语怎么说,海绵宝宝用英文怎么说,海绵宝宝英文名是什么。1. SPONGEBOB SQUAREPANTS 近期很夯的一步卡通影片《海绵宝宝》(SpongeBob SquarePants)是一系

知识

茶盏怎么用(茶盏在茶道中干嘛用)

阅读(5446)

本文主要为您介绍茶盏怎么用,内容包括茶盏怎么用我要写一篇200字左右的茶盏的使用说明,求指教,茶盏在茶道中干嘛用,问一下斗笠盏如何使用现在是不是很少有人使用它,它的意义。苏东坡的名句"从来佳茗似佳人",典型地代表了唐宋及以后的文人墨客,

知识

thinkpad小红点怎么用(怎么学习使用thinkpad小红点)

阅读(7609)

本文主要为您介绍thinkpad小红点怎么用,内容包括怎么学习使用thinkpad小红点,thinkpad小红点怎么用,求教:THINKPAD的小红点使用方法。Thinkpad 小红点最高效的使用方法为:左手拇指按左键,无操作时在左键待命2、右手拇指按右键,同时兼按空格键及