2016-11-09 9 views
-1

GetModuleInformationを呼び出すにはHMODULEが必要ですが、私はdllにあるクラスのCOM GUIDのみを知っています。 GUIDのみを知っているHMODULE(またはDLLの名前)を決定するwinapi関数はありますか?COM GUIDからHMODULEを取得する方法

EDIT:アプリケーションは、通常のユーザーとして実行(上昇していない)

+0

[GetModuleHandleEx](https://msdn.microsoft.com/en-us/library/windows/desktop/ms683200.aspx)、インターフェイスメソッドのアドレスを渡します。 – IInspectable

+0

@IInspectable:これはインプロセスCOMオブジェクトに対してのみ機能し、COMオブジェクトのインスタンスを実際に持っている場合にのみ有効です。 OPは、彼はオブジェクトではなくGUIDしか持っていないと言います。 –

+0

@RemyLebeau:* "インプロセスのCOMオブジェクトに対してのみ有効です" * - 'HMODULE'はインプロセスでのみ意味があるので、これは適用範囲を限定するものではありません。また、メンバ関数のアドレスを取得するためにオブジェクトのインスタンスは必要ありません。型情報は十分であり、GUIDは型を一意に識別する。 – IInspectable

答えて

2

GUIDは、COMオブジェクトのCLSIDである場合、あなたは(HKEY_CLASSES_ROOT\CLSID\{guid}サブキーで)Windowsレジストリ内のオブジェクトの実装EXE/DLLファイル名を検索することができます、またはアプリのSxSマニフェストで登録不要のCOMを使用している場合。

オブジェクトがDLL内にある場合、そのDLLがプロセスのメモリに既にロードされている場合はGetModuleHandle/Ex()を使用して、LoadLibrary()をメモリにロードできます。

+0

[登録不要のCOM](https ://msdn.microsoft.com/en-us/library/ms973913.aspx)。 – IInspectable

+0

登録不要のCOMはマニフェストを使用するため、レジストリの代わりにマニフェストでGUIDを検索するだけで済みます。マニフェストにはCOMオブジェクトのEXE/DLLファイルへのパスがあります。 –

+0

登録無料のCOMがどのように実装されているか、私は完全に理解しています。私はあなたの答えがこの一般的なシナリオには当てはまらないことを指摘していました。 – IInspectable

関連する問題