com是什么意思?

Com国际顶级域名

Com也是国际顶级域名。Com,company的缩写,是最常用的顶级域名,表示一个商业网站。

[编辑本段]COM组件

什么是COM组件

COM是组件对象模型的缩写。

用户需要什么样的软件产品?这是个选择题,但是高效和健壮肯定会选。一个软件开发者怎么做才能满足用户的需求?需要确保在升级应用程序时不会破坏与以前版本的向后兼容性。有必要独立于特定的操作系统来扩展系统服务。面向对象编程显然是一个革命性的变化。利用面向对象的设计方法,我们可以很容易地把要解决的问题抽象成各种类,并隐藏内部动作,只提供一些接口。但这并没有完全解决我们的问题。昨天在《程序员》杂志上看到现在是后OO时代,那么OO之后会是什么呢?它应该是面向组件的。

雷神刚刚看完《COM技术内幕》这本书,整理了一个FAQ,供大家学习这本书时参考。

这是第一部分,包括前三章。

FAQ1:什么是COM组件?[第一章]

FAQ2:组件不是...?[第一章]

FAQ3:什么是接口?[第二章]

FAQ4:界面的作用是什么?[第二章]

FAQ5:什么是我不知道的?[第三章]

FAQ6:QueryInterface的作用是什么?[第三章]

FAQ7:QueryInterface函数的实现规则是什么?[第三章]

常见问题8:查询界面是什么样子的?[第三章]

FAQ9:QueryInterface函数的参数IID是什么?[第三章]

FAQ10:我什么时候需要创建新的COM组件版本?[第三章]

问题:

什么是COM组件?

回答:

COM组件由以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。

com组件是按照COM规范编写的。

COM组件是小的二进制可执行文件。

COM组件可以为应用程序、操作系统和其他组件提供服务。

自定义COM组件可以在运行时与其他组件连接,形成一个应用程序。

COM组件可以动态地插入或卸载应用程序。

COM组件必须动态链接。

COM组件必须隐藏(封装)它们的内部实现细节。

COM组件必须隐藏它们实现的语言。

COM组件必须以二进制形式发布。

COM组件必须能够在不干扰现有用户的情况下升级。

COM组件可以透明地在网络上重新定位。

COM组件以标准的方式宣布它们的存在。

问题:

该组件不是...?

回答:

COM组件不是一种计算机语言。

COM组件不是dll,只是用dll给组件提供动态链接的能力。

COM组件不是API函数集。

COM组件不是一个类。

问题:

什么是接口?

回答:

接口提供两个不同对象之间的连接。

计算机程序由一组函数连接,这些函数定义了程序不同部分的接口。

DLL的接口就是它输出的函数。

C++类的接口就是这个类的成员函数集。

COM中的接口是由组件实现并提供给客户的一组功能。

在COM中,接口是包含函数指针数组的内存结构,数组元素是由组件实现的函数地址。

问题:

接口的作用是什么?

回答:

对于组件,如何将它们连接起来形成一个应用程序需要接口。

在COM中,接口就是一切。对客户来说,组件就是接口集,客户只能通过接口与组件打交道。

这表明该接口可以保护系统免受外部变化的影响。这就是包装的体现。

接口实现使用户能够以相同的方式处理不同的组件。这就是多态性的体现。

问题:

接口怎么实现?

回答:

COM接口在C++中用纯抽象基类实现。

一个COM组件可以支持多个接口。

一个C++类可以使用多重继承来实现一个支持多重接口的组件。

组件可以支持任意数量的接口。

接口应该是不变的。升级组件时,不应修改原有接口,而应添加新接口。

应该仔细设计实现接口,以便它可以支持各种实现。

问题:

我知道什么?

回答:

IUnKnown是一个接口。

所有COM接口都继承IUnKnown。

IUnKnown是在WIN32 SDK的UNKNWN头文件中定义的。

///I unknown的定义

接口未知

{

虚拟HRESULT __stdcall QueryInterface(常量IID & amp;iid,void * * PPV)= 0;

虚拟ULONG _ _ stdcall AddRef()= 0;

虚拟ULONG _ _ stdcall Release()= 0;

}

问题:

QueryInterface的作用是什么?

回答:

QueryInterface是IUnKnown的成员函数,客户可以通过它查询一个组件是否支持特定的接口。

QueryInterface函数返回一个指向组件支持的接口的指针。

如果QueryInterface函数没有找到组件支持的接口,则返回指针为空。

QueryInterface函数可以用if…then…else语句、数组、哈希表、树来实现。

QueryInterface函数不能使用case语句,因为QueryInterface函数返回的是HRESULT结构而不是数字。

QueryInterface也是一种解封组件版本的机制。这种机制使新旧版本的组件能够互操作。

问题:

QueryInterface函数的实现规则是什么?

回答:

QueryInterface返回的IUnKnown指针总是相同的。

如果一个客户得到了一个接口,它总是可以得到的。

客户可以再次获得他们已经拥有的界面。

客户可以返回到开始界面。

如果在一个接口上可以获得一个特定的接口,那么这个接口可以从任何接口上获得。

问题:

QueryInterface函数的参数IID是什么?

回答:

它是一个结构,一个接口标识符结构。

IID确定客户需要的接口。

每个接口都有唯一的接口标识符。因此,与IID相对应的界面永远不会改变。

接口IID决定COM组件的版本。

不同的接口有不同的id,包括不同版本的接口。

问题:

我什么时候需要创建新版本的COM组件?

回答:

为现有接口指定新ID时,至少应满足以下条件之一。

当界面中的功能数量发生变化时。

界面中功能的顺序已经改变。

接口中函数的参数已经改变。

接口中函数参数的顺序已经改变。

接口中函数的参数类型已更改。

接口中函数的返回值发生变化。

接口中函数的返回值类型已更改。

界面中函数参数的含义发生变化。

界面中功能的含义发生了变化。

简单地说,COM是一种跨应用程序和语言享受二进制代码的方式。与C++不同,它提倡源代码重用。ATL就是一个很好的例子。源码级复用虽然好,但是只能用在C++里。也带来了名称冲突的可能,更不用说代码的不断复制和重用,导致项目的膨胀和臃肿。

Windows使用dll来享受二进制级别的代码。这也是运行Windows程序的关键——重用kernel32.dll、user32.dll等。但dll是为C接口编写的,只能由C或理解C调用规范的语言使用。编程语言负责实现代码,而不是dll本身。在这种情况下,dll的使用受到限制。

MFC引入了另一种MFC扩展dll二进制* * *共享机制。但它的用途仍然有限——只能在MFC程序中使用。

COM通过定义二进制标准来解决这些问题,即COM明确指出二进制模块(dll和exe)必须编译成与指定的结构相匹配。该标准还明确规定了如何在内存中组织COM对象。COM定义的二进制标准也必须独立于任何编程语言(比如C++中的命名修饰)。一旦满足这些条件,就可以从任何编程语言轻松访问这些模块。编译器负责生成的二进制代码与标准的兼容性。这使得后来的人更容易使用这些二进制代码。

在内存中,这种标准形式的COM对象偶尔会在C++虚函数中使用,所以这就是为什么很多COM代码使用C++的原因。但是请记住,编写模块的语言是不相关的,因为生成的二进制代码在所有语言中都是可用的。

此外,COM不是Win32独有的。理论上可以移植到Unix或者其他操作系统上。但是好像没听说过Windows之外的COM。

[编辑本段] com英文版

1表示* * *相同或相同,意为“* * *相同、相互、在一起”;

此外,还有col、cor、co、syn、sym、syl、syr另一个超级表* * *与对方;Homo表一样,一样;因为表是相同和相似的;Iso表等。

2.它意味着加强或扩展意思;

类似的前缀有:be,a,ac,af,en,em,col,cor。

com-和con-前缀的意思是“* * *在一起”。如连接、合并、战斗等。

根据在英英词典中查找com的意思,它给出的解释是,当它以。com,就是业务相关的意思。

根据我后来在网上找到的词源中的解释,com是* * *的意思,是co和con的同义词。

[编辑本段]计算机的缩写

通常在游戏中代表电脑玩家。

参考资料:

/view/25941.html?tp=0_11