This questionは、現在実行されているコードを含むDLLのハンドルを取得する方法を尋ねます。 answersのいずれかのA linkは、アドレス__ImageBase
をモジュールハンドルとして使用することを示します。これは私のために働く。__ImageBaseまたはGetModuleHandleEx()を使用してフレームワークを取得できるときに、フレームワークが独自のHMODULEを格納するのはなぜですか?
私の質問は、現在のモジュールのハンドルを取得するのが驚くほど簡単であることを考えると、MFCのようなフレームワークは通常、グローバル変数のDllMain()
に渡されるインスタンスハンドルを格納します。 __ImageBase
に頼らない理由はありますか?
Raymond Chenによれば、__ImageBase
はMicrosoftリンカーのみです。 GetModuleHandleEx()
を使用するリンカーに依存しない方法を含む、より正確な答えを持つanother questionがあります。 VirtualQuery()
を使用してWin2000以前のソリューションもあります。質問は有効です:簡単に検索できるときにベースアドレスを保存する理由
で純粋なWinAPIの中で行うことができます
それは簡単に説明していますので、MFCは、__ImageBaseとGetModuleHandleExの両方に先行します。あなたのコードベースはそれよりも前かもしれませんし、元のプログラマーはそれらについて知らなかったかもしれません。モジュールハンドルを保存するのは完全に良い解決策なので、誰かが他のオプションを探す必要はありませんでした。 –
ハンドルが格納されている場所を認識しない関数にハンドルを渡す必要があることを除いて。 - 歴史的背景も良い点です。 – krlmlr