2017-03-04 8 views
-2

OLE Automation/COMインターフェイスのインターフェイスIDを特定するための特定の参照方法または標準的な方法はありますか?たとえば、IWebBrowser2インターフェイスのIDはD30C1661-CDAF-11D0-8A3E-00C04FC9E26Ehereと表示されています)です。しかし、私がこれを見つけることさえできる唯一の方法は、この特定のケースですでに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です。私はWin APIのインターフェイスをここではサードパーティではなく話しています。 CLSIDはやや難しいものですが、レジストリ内で見つけられるか、またはプロセスIDから取得する関数で見つけられます。私は自分のオプションがCOM/CoCreateInstanceで何を使用するのかを理解しようとしています。

+0

* riid *は本当によく知られています。あなたが '__uuidof(ISomeInterface)'やマクロ['IID_PPV_ARGS'](https://msdn.microsoft。)を使うことができるように、' MIDL_INTERFACE( "rid")ISomeInterface'として定義されたsdk /com/ja/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に電話をかけ、既にまたはQueryServiceと呼び出すこともできます。

例としてits page on MSDNを見ると、CoCreateInstanceCLSID_InternetExplorerをCLSIDとして呼び出すことがわかります。 RIIDはCLSID_InternetExplorerによって実装任意のインターフェースとすることができ、MSDNは、ページ上で右が継承されたインターフェイスを示します。

IWebBrowser2インターフェイスは、間接的にIDispatchから派生します。つまり、IWebBrowser2はIWebBrowserAppから派生します.IWebBrowser2は、IDispatchから最終的に派生したIWebBrowserから派生しています。

他のインターフェイスを実装している可能性がありますが、通常は「メイン」インターフェイスとQueryInterfaceを作成します。

IShellFolderおよびIShellItemなどの他のインターフェイスは、既存のシェルオブジェクトとshell32.dllの「作成者」関数の両方から、さまざまな方法で作成できます。

探しているインターフェイスがわからない場合は、SDKに含まれている.idlファイルを検索できます。これらのファイルには、Windowsにドキュメント化されたほとんどのインターフェイスの宣言が含まれている必要があります。

GUIDが何であるかを気にしたい場合は、StringFromIIDに電話することができますが、気にしない時間がほとんどです。一方、文書化されていないインターフェイスを扱っている場合は、GUIDがすべてある可能性があります。OleView、レジストリとインターネットを使用して、インターフェイスの名前とその宣言がどのようなものかを調べる必要があります。

関連する問題