com学习笔记(5)HRESULT,GUID,注册表

用百度词条挺不错的.

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对查找程序集的需求都必须实现。

image

图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

好文章

原文地址:https://www.cnblogs.com/Clingingboy/p/1518796.html