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