mod*_*diX 2 windows com registry
我知道我可以从注册表中的COM类对象中读取CLSID Classes\<CLASSNAME>\CLSID\@.
我怀疑在注册的COM接口上我可以从Classes\<CLASSNAME>\IID\@或读取IID Classes\CLSID\<CLSID>\IID.
我简单地阅读了文章COM ID和注册表项,这个问题仍然对我开放.不幸的是,我现在没有测试用例.
注册表不是一个编程资源,注册表项仅在COM基础结构需要它们时才存在.例如,CLSID键是帮助COM找到实现服务器的可执行文件所必需的,程序员必须提供CLSID guid.
他还需要知道IID,将其传递给QueryInterface()以获取接口指针.有可能在HKLM\Software\Classes下\接口的条目,但它并不十分常见.当需要将接口从一个公寓封送到另一个公寓时,COM基础结构需要它,注册表项包含有助于完成该工作的代理的CLSID.使用Regedit.exe快速查看该密钥应该说服您根本不可能有所帮助,与服务器本身没有任何联系.只有你很幸运,你才能在那里找到一个类型库LIBID.
COM程序员为您提供CLSID和IID值有两种基本方法.不友好的方式是.idl或.h文件,几个Windows组件(DirectX,Media Foundation,WASAPI等)就是这样.足以看到IID回来了.
友好的方式是一个类型库,一个与语言无关的已实现的coclasses和接口的描述,几乎任何编译器都知道如何读取.有时作为单独的.tlb或.olb文件提供,但通常作为资源嵌入可执行文件中.最好的方法是使用Oleview.exe SDK实用程序.使用"文件">"查看Typelib",然后选择.tlb或.dll文件.它将类型库反编译回IDL,IDL是COM作者用来描述其组件的语言.你可以毫不费力地找回IID.您唯一需要知道的是可执行文件的名称.
一定要利用编译器中的类型库,假设你找到了一个.您现在可以使用友好名称而不是原始GUID,对代码进行语法检查,并且在版本更改且作者正确使用新IID时,很少需要做任何戏剧性的事情.如果找不到,请务必与作者交谈,一个小提示可以为您节省大量的麻烦.
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |