2017-03-04 1 views
-2

OLE 자동화/COM 인터페이스의 인터페이스 ID를 찾는 특정 참조 또는 표준 방법이 있습니까? 예를 들어, IWebBrowser2 인터페이스의 ID는 D30C1661-CDAF-11D0-8A3E-00C04FC9E26E이며 here입니다. 그러나이 특정 위치에 이미 GUID가 있으므로이 위치를 찾을 수있는 유일한 방법이 있습니다.Windows OLE/COM 인터페이스의 ID는 어디에서 찾을 수 있습니까?

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

MSDN

당하지만은 해당 페이지에서 볼 수 있듯이, 나는 주어진 OLE 인터페이스에 필요한 riid 알 수있는 방법이 없습니다 : 사용의 경우는 여기에 소요되는 함수를 CoCreateInstance입니다. 제 3의 파티가 아니라 Win API 인터페이스를 여기에서 말하고 있습니다. CLSID는 찾기가 다소 어렵지만 레지스트리에서 찾을 수도 있고 프로세스 ID에서 가져 오는 함수로 찾을 수도 있습니다. 내 옵션이 COM/CoCreateInstance와 함께 사용되는지 확인하려고합니다.

+0

* riid *는 평소에 잘 알려져 있습니다. 당신이'__uuidof (ISomeInterface)'나 매크로 ['IID_PPV_ARGS'] (https://msdn.microsoft.)를 사용할 수 있도록'MIDL_INTERFACE ("rid") ISomeInterface'로 정의 된 sdk/wdk 헤더 파일에서 문서화 된 인터페이스를 사용한다면.com/ko-us/library/windows/desktop/ee330727 (v = vs.85) .aspx). * rclsid *에 대한 질문은 여기에 있습니다. 문서에서'CLSID'가'ISomeInterface'를 구현하거나 자신을 연구하는 검색이 필요합니다. – RbMm

+0

각 인터페이스의 MSDN 페이지 하단에 GUID가 표시됩니다. 당신이 원하는 인터페이스를 모른다면, 내가 무엇을 묻고 있는지 확실하지 않습니다 ... – andlabs

+0

당신이 무엇을 요구하고 있는지 완전히 불분명합니다. Don Box '[Essential COM] (https://www.amazon.com/dp/0201634465)을 반드시 읽어보십시오. 그러면 더 나은 질문을 할 수있는 입장이됩니다. – IInspectable

답변

0

일반적으로 IID 또는 CLSID를 찾지는 않습니다. 인터페이스를 찾습니다.

IID는 단지 IID_ISomeInterface 시간의 99 %이며 Microsoft 도구 체인을 사용하는 경우 __uuidof(ISomeInterface)을 사용할 수 있습니다. 대부분의 CLSID 및 IID는 uuid.lib에 저장되며 MSDN에서는 다른 라이브러리와 연결해야하는 경우 .LIB의 이름을 알려줍니다.

일단 인터페이스를 찾으면이 인터페이스의 인스턴스를 생성/가져 오는 방법을 알아야합니다. 때로는 CoCreateInstance으로 전화하고 이미 인스턴스가있는 다른 인터페이스에서 QueryInterface 또는 QueryService으로 전화하는 경우가 있습니다.

예를 들어 its page on MSDN을 보면 CoCreateInstanceCLSID_InternetExplorer으로 CLSID로 호출해야합니다. RIID는 CLSID_InternetExplorer 모든 인터페이스에 의해 구현 될 수 있으며 MSDN 페이지에 바로 상속 인터페이스 나열

IWebBrowser2 인터페이스 간접적를 IDispatch에서 유래; 즉, IWebBrowser2는 IWebBrowserApp에서 파생됩니다. IWebBrowser2는 결국 IDispatch에서 파생되는 IWebBrowser에서 파생됩니다.

다른 인터페이스를 구현할 수도 있지만 일반적으로 "메인"인터페이스와 QueryInterface을 만듭니다.

IShellFolderIShellItem과 같은 일부 인터페이스는 기존 쉘 객체와 shell32.dll의 "작성자"함수에서 여러 가지 방법으로 만들 수 있습니다.

찾고있는 인터페이스를 모르는 경우 SDK에 포함 된 .idl 파일을 검색 할 수 있으며 Windows에 문서화 된 인터페이스의 대부분을 포함해야합니다.

GUID가 무엇인지 알고 싶지만 걱정하지 않으려는 경우에는 StringFromIID으로 전화 할 수 있습니다. 반면에 문서화되지 않은 인터페이스를 다루는 경우에는 GUID가 모두있을 수도 있고 OleView, 레지스트리 및 인터넷을 사용하여 인터페이스의 이름과 그 선언이 무엇인지 알 수 있습니다.

관련 문제