14

重複の可能性:
現在実行中のコードの HMODULE を取得するにはどうすればよいですか?

自分のモジュールでリソースを見つけようとしています。このモジュールが実行可能である場合、それは簡単です - GetModuleHandle(NULL)「メイン」モジュールのハンドルを返します。

ただし、私のモジュールは、別の実行可能ファイルによってロードされる DLL です。そのGetModuleHandle(NULL)ため、モジュールハンドルをその実行可能ファイルに返しますが、これは明らかに私が望んでいるものではありません。

現在実行中のコードを含むモジュールのモジュール ハンドルを特定する方法はありますか? への呼び出しで DLL の名前を使用することは、GetModuleHandle()私にはハックのように思えます (問題のコードが別の DLL に移植された場合、簡単に保守できません)。

4

3 に答える 3

13

モジュール ハンドルが DllMain に渡されたときに保存し、後で実際に必要になったときに使用します。多くのフレームワーク (MFC など) はこれを自動的に行います。

于 2008-09-23T08:04:42.987 に答える
6

DLLがMFCとリンクされている場合、いくつかの関数が呼び出されたDLLのインスタンスを取得する方法があります。

void dll_function()
  {
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  HINSTANCE dll_instance = AfxGetInstanceHandle();
  }
于 2011-08-10T16:29:29.917 に答える
1

既に述べたように、これは DllMain 関数に渡されたモジュール ハンドルを保存することで実行できます。

ただし、ハンドルを保存する必要がある理由は他にもあります。

たとえば、リソース リンカーを使用してリソースを DLL にバインドする場合、LoadResource関数 API を介してこれらのリソースを取得するには、このモジュール ハンドルが必要になります。

于 2008-09-23T23:59:16.453 に答える