com学习笔记(5)HRESULT,GUID,注册表
2009-07-07 23:05
218 查看
用百度词条挺不错的.
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
好文章
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
好文章
相关文章推荐
- com学习笔记(5)HRESULT,GUID,注册表
- COM学习笔记六《COM技术内幕》§6 —— HRESULT、GUID和注册表
- COM学习笔记(四):注册表、内存管理、GUID<->字符串
- COM技术内幕第六章笔记-HRESULT、GUID、注册表及其他
- Inside COM读书笔记-----关于HRESULT、GUID、注册表及其它细节
- Inside COM读书笔记-----关于HRESULT、GUID、注册表及其它细节
- 第6章 关于HRESULT、GUID、注册表及其他细节
- COM技术内幕--关于HRESULT、GUID、注册表及其他细节
- 【COM学习】之二、HRESULT,GUID
- HRESULT CImage::Save( LPCTSTR pszFileName, REFGUID guidFileType ) const throw()
- 【COM学习】之二、HRESULT,GUID
- COM 技术内幕学习之六 (HRESULT,GUID)
- 异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权
- C#对注册表编程的支持
- SSAS没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 解决办法
- windows 注册表
- C#操作注册表(转)
- 注册表全集3
- 使用Guid做主键和int做主键性能比较
- 由注册表引起的 I/O 操作发生了不可恢复的错误修复方法