Руководство по интерфейсу COM - PullRequest
11 голосов
/ 13 апреля 2010

Я не сильно разбираюсь в интерфейсах 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 где я могу его найти?

Ответы [ 2 ]

7 голосов
/ 13 апреля 2010

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

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

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

...