Руководство по интерфейсу COM

Я не очень люблю интерфейсы COM, поэтому у меня есть небольшой вопрос, скажем, у меня есть этот код:

[Guid("148BD528-A2AB-11CE-B11F-00AA00530503"), 
 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IEnumWorkItems {
    [PreserveSig()]
    int Next([In] uint RequestCount, [Out] out System.IntPtr Names, 
                       [Out] out uint Fetched);
    void Skip([In] uint Count);
    void Reset();
    void Clone([Out, MarshalAs(UnmanagedType.Interface)] 
                          out IEnumWorkItems EnumWorkItems);
}

Откуда я знаю, что "148BD528-A2AB-11CE-B11F-00AA00530503" соответствует IEnumWorkItems: http://msdn.microsoft.com/en-us/library/aa380706(VS.85).aspx

Как если бы я хотел знать этот интерфейс GUID: http://msdn.microsoft.com/en-us/library/aa381811(VS.85).aspx, где его найти?

Ответ 1

Я никогда не сталкивался с официальной документацией. Однако есть несколько способов поиска:

  • Откройте тип lib (обычно сам сервер DLL) в OLE Viewer (входит в инструменты визуальной студии)
  • поиск в SDK.idl/.h's
  • напишите короткую программу VС++ и используйте __uuidof (IInterface)
  • Поиск его под HKCR\Interface (хотя не все интерфейсы должны регистрироваться там)

Ответ 2

В реестре выполните поиск имени класса в HKEY_CLASSES_ROOT, вы найдете GUID