COM中的各个ID分析
来源:互联网 发布:2017双11淘宝和京东 编辑:程序博客网 时间:2024/06/05 00:55
(一) 说明:
CLSID,IID,LIBID,APPID
进入注册表的只有CLSID,APPID和LIBID,IID永远只会沉默地呆在IDL里面
一个DLL或者一个EXE只有一个APPID
一个DLL或EXE里可以有N个CLSID(对象)
每个CLSID只会对应一个LIBID
第个CLSID可以有N个IID(接口)
其关系图如下:
CLSID是对象的唯一标识,尽管LIBID原则上也是,但功能不一样,CLSID相当于在茫茫每个国家(AppID)中一户家庭的地址,LIBID是CLSID的副产品,相当于此户家庭的详细信息,IID相当于每一户家庭中每一成员的身份标识,也许一个家庭只有一个人,或许有N个人。
在COM的世界里,要某人为你做事,必须为此人创建一个家庭,用CLSID创建家庭,再由询问这个家庭的成员QueryInterface来获得想要的人,再用此人办事(调用此接口的函数或者属性)。
如果想知道这户家庭每个人的有什么能力的话,可以用LIBID获取此家庭的详细信息。
(二) 使用:
ØCLSID在工程中主要生存在IDL和REG里面,供客户创建对象调用。
ØLIBID的存在方式除了在IDL和REG里,还会存在代码中,一般用于由类型信息的场合。
类型信息:在COM编译的时候,由编译器生成的信息,直接存在DLL或EXE里面,客户可以通过LoadTypeLib或者LoadRegTypeLib获到类型信息,从而可以得到整个COM DLL或EXE里面的对象接口的所有信息。
如:IDispatchImpl和IProvideClassInfo2Impl里面都需要用到LIBID,IDispatchImpl是需要由字符得到DISPID,再执行,所以需要LIBID获得类型信息,进而调用。
IProvideClassInfo2Impl为客户提供事件(EVENT)详细的类型信息,必定需要LIBID获得类型信息
获得类型信息的方法如下:
LoadTypeLib或者LoadRegTypeLib得到ITypeLib
LoadTypeLib由文件路径生成ITypeLib
LoadRegTypeLib由LIBID生成ITypeLib
换句话说,如果客户获取类型信息需要LoadTypeLib,而本地要获得类型信息可以用LoadRegTypeLib
ØIID对应一个接口(interface)其值一般可以__uuidof(接口)得到,
ØAPPID极少应用,准确说现在还没用过。
- COM中的各个ID分析
- shark中的各个id的产生机制
- 分析onXXX事件监听器中的两个参数position和id
- 分析onXXX事件监听器中的两个参数position和id
- android各个文件分析
- linux各个版本分析
- HashMap各个版本分析
- 各个语言中的DateFormatter
- ASMCMD中的各个命令
- SAPTM 中的各个角色
- Android 中的各个Image
- ASMCMD中的各个命令
- VLC中的各个模块
- android中的各个单位
- ASMCMD中的各个命令
- java中的各个层
- 操作系统中的各个关系
- Java获得磁盘盘符,并且分析电脑各个盘符中的大小
- What's P3P?
- 函数调用过程内存堆栈变化分析
- 最新发布: Windows Azure Toolkit for Windows Phone 7 v1.2
- 解决IE9下external.menuArguments.location.href没有权限的问题
- 分布式计算之旅(一)
- COM中的各个ID分析
- C语言编程中的字节对齐问题
- C#窗体皮肤ssk文件使用方法
- I18N、L10N、G11N的区别?
- Ruby on Rails安装指南
- android的xml文件中@和?的用法
- BOCHS 调式命令大全
- 如何在MOSS上自定動作
- CComPtr与CComQIPtr的区别