我在哪里可以找到Windows Ole/com接口的ID



是否有任何特定的参考或标准方法可以找到OLE Automation/COM接口的接口ID?例如,IWEBBROWSER2接口的ID为D30C1661-CDAF-11D0-8A3E-00C04FC9E26E,如下所示。但是,我什至能够找到这个问题的唯一方法是因为在这种特殊情况下我已经有了GUID。这里的用例是函数cocreateinstance,它采用:

HRESULT CoCreateInstance(
  _In_  REFCLSID  rclsid,
  _In_  LPUNKNOWN pUnkOuter,
  _In_  DWORD     dwClsContext,
  _In_  REFIID    riid,
  _Out_ LPVOID    *ppv
);

PER MSDN

但是,正如您在该页面上看到的那样,没有办法知道给定的OLE接口需要什么riid。我说的是在这里赢得API接口,而不是第三方。CLSID也很难找到,但是可以在注册表中找到它们,也可以通过我相信的过程ID获取它的功能。我试图弄清楚我的选择是与com/cocreateinstance一起使用的。

您通常不寻找IID或CLSID,而是寻找界面。

IID只是IID_ISomeInterface 99%的时间,如果您使用的是Microsoft工具链,则可以使用__uuidof(ISomeInterface)。大多数CLSID和IID都存储在uuid.lib和msdn中,如果您需要与其他东西链接,请告诉您.lib的名称。

找到接口后,您需要弄清楚如何创建/获取此接口的实例。有时您会调用CoCreateInstance,有时您在一个已经有一个实例的另一个接口上调用QueryInterfaceQueryService

如果我们以IWebBrowser2为例,则如果您在MSDN上查看其页面,则发现应使用CLSID_InternetExplorerCoCreateInstance为CLSID。RIID可以是CLSID_InternetExplorer和MSDN实现的任何接口,列出了页面上的继承接口:

iwebbrowser2接口从idispatch间接衍生;也就是说,iwebbrowser2源自iwebbrowserapp,这又来自iwebbrowser,最终来自idispatch。

它可能会实现其他接口,但通常您为其他任何东西创建"主"接口和QueryInterface

可以从现有的shell对象和shell32.dll中的"创建者"函数中创建其他一些其他接口,例如IShellFolderIShellItem

如果您甚至不知道要查找的界面,则可以搜索SDK一部分的.IDL文件,它们应包含Windows中大多数已记录的接口的声明。

如果您绝对想知道GUID是什么,则可以在IID上致电StringFromIID,但大多数时候您不在乎。另一方面,如果您要处理无证件的接口,那么您可能拥有的全部是GUID,并且必须使用Oleview,注册表和Internet来弄清楚界面的名称是什么以及其声明是什么样。

最新更新