用百度词条挺不错的.
1.HRESULT
http://baike.baidu.com/view/1754469.htm
2.GUID
http://baike.baidu.com/view/185358.htm
3.CLSID
http://baike.baidu.com/view/150219.htm
GUID,它是Globally Unique Identifier的简称,中文翻译为“全球唯一标示符”,在Windows系统中也称之为Class ID,缩写为CLSID
4.com组件与注册表
转自http://book.csdn.net/bookfiles/179/1001798036.shtml
COM注册表入口
COM使用了一个不同的方法来查找这些对象——注册表。在注册表项HKEY_CLASSES_ROOT(HKCR)中,所有的COM对象都被配置在CLSID项下面。对于原生的COM对象,注册表项HKCR/CLSID/{CLSID}/InProcServer32指示了这个DLL的完整路径。
对于可以当作COM对象使用的 .NET组件,注册表中记录了更多的信息。注册表项HKCR/CLSID/{CLSID}/InProcServer的默认值是mscoree.dll,如图4-8所示。
对于 .NET组件,在InprocServer32项下面,你可以找到下面这些配置项:
● 对于 .NET组件来说,Default的值是mscoree.dll。这个DLL是一个COM DLL,它可以为 .NET组件提供COM接口(作为一个包装),所以.NET组件可以当作COM对象使用。mscoree.dll会加载和执行 .NET程序集,实现CCW的角色。
● Assembly项的值指示了此程序集的强名称(比如,程序集名称、版本、语种和公钥)。
● Class项的值指示了类型的名称,包括命名空间。
● CodeBase项的值指示了共享程序集的完整文件路径。
● RuntimeVersion项是.NET运行时的版本。
● ThreadModel项定义了这个服务组件接受的单元类型。对于.NET组件,默认的值是Both,允许所有种类的COM单元类型。
注册表中的CodeBase项和应用程序配置文件中的<codeBase>元素在功能上很相似。和<codeBase>元素一样,CodeBase注册表项中引用的程序集也都是共享的。所有的应用
程序都能使用同样的CLSID引用这个COM对象,所以它也是共享的。这里的问题在于注册表并不是所有情况下都能用上。使用DCOM协议在网络上传递一个 .NET组件时,不仅要调用COM的功能在注册表中查找相应的类型,也需要调用 .NET的序列化和反序列化功能。因此,.NET和COM对查找程序集的需求都必须实现。
图4-8 COM注册表项目
5.注册com组件
转自http://tech.163.com/06/0410/10/2EBDCQ2I00091SB8.html
COM位置无关性的实现机制并不深奥,它主要依赖于注册表,这也就是为什么一定要在使用之前对COM组件进行注册的原因。COM库在接到客户程序的请求后,会到注册表中检索COM对象的注册条目,并以此来定位COM对象
当然,COM组件不能天生就具备将注册信息写入到注册表中的功能,对进程内服务器而言,还必须实现两个名为DllRegisterServer和DllUnregisterServer的输出函数,来负责注册信息的写入和卸载。
HRESULT DllRegisterServer(void)
{
// 主要实现方法:
// 调用Windows API函数得到模块当前所在的物理位置,
// 调用Windows API操作注册表的函数创建图5-4、5-5中所示的注册项目
…(代码略)
}
HRESULT DllUnregisterServer(void)
{
// 主要实现方法
// 调用Windows API操作注册表的函数,在注册表中删除写入的信息。
(代码略)
}
6.com的调用
转自http://www.vckbase.com/document/viewdoc/?id=1493
好文章