如何在不知道IID的情况下创建CLSID的COM对象实例

时间:2011-02-16 22:26:31

标签: c++ winapi com

如何在不知道它实现的任何接口的情况下通过其CLSID创建类的实例。

例如,CLSID“{3ad05575-8857-4850-9277-11b85bdb8e09}”实现了一个从IFileOperation派生的类(在win7中),但是如果我不知道它是从它派生的,那么有没有办法创建这样的对象或者至少找出这个CLSID实现的接口?

谢谢! : - )

2 个答案:

答案 0 :(得分:6)

大卫是对的,你总是可以要求IUnknown。但是你会从那里碰壁,如果你不知道IID,COM​​就不会提供一种方法来发现超出此范围的实现接口。鉴于可能的GUID值的数量,没有实际的方法来“全部尝试”。它也没有多大意义,如果你偶然猜错IID,你仍然不知道如何正确调用接口方法。你不知道它需要什么参数,你不知道它做了什么。当心IFormatDiskDrive。

与Automation兼容的服务器通常提供类型库。你可以从中挖出接口。不是你曾经做过的,你让你的编译器进行挖掘。

但是由于基于IUnknown的shell接口因此不实现自动化(如IFileOperation),您必须事先知道要使用的内容。也可以立即将IID传递给CoCreateInstance。

答案 1 :(得分:4)

我想你总是可以问IUnknown然后从那里拿走它。

但我觉得你的问题有点困惑,你使用某些术语的方式让我怀疑你对COM的基本知识有些缺乏。