Frage

  

Mögliche Duplizieren:
   Wie erhalte ich die HMODULE für die derzeit ausgeführte Code?

Ich versuche, eine Ressource in meinem eigenen Modul zu finden. Wenn dieses Modul eine ausführbare Datei ist, das ist trivial -. GetModuleHandle(NULL) den Griff des „main“ Modul liefert

Ihr Modul ist jedoch eine DLL, die durch eine andere ausführbare Datei geladen wird. So GetModuleHandle(NULL) den Modulgriff auf diese ausführbare Datei zurückkehren, das ist offensichtlich nicht das, was ich will.

Gibt es eine Möglichkeit das Modul Handle des Moduls zu bestimmen, die die aktuell ausgeführte Code enthält? Mit dem Namen des DLL in einem Aufruf von GetModuleHandle() wie ein Hack mir scheint (und ist nicht leicht zu pflegende der Code in Frage, falls in eine andere DLL transplantiert).

War es hilfreich?

Lösung

Speichern Sie das Modul Griff weg, wenn es Ihnen in DllMain gegeben wird und es dann später verwenden, wenn Sie es wirklich brauchen. Viele Rahmenbedingungen (zum Beispiel MFC) tut dies automatisch.

Andere Tipps

Wenn DLL mit MFC verknüpft ist, dann ist es eine Möglichkeit Instanz der DLL zu erhalten, in denen einige Funktion aufgerufen wurde:

void dll_function()
  {
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  HINSTANCE dll_instance = AfxGetInstanceHandle();
  }

Wie bereits erwähnt kann dies in der DllMain Funktion übergeben durch das Speichern des Modulgriffes erfolgen.

Aber es gibt andere Gründe, warum Sie den Griff sparen sollte.

Zum Beispiel, wenn Sie sich entscheiden, die DLL zu binden Ressourcen, um die Ressource-Linker verwenden, müssen Sie diesen Modul Griff an diesen Ressourcen über die bekommen Load API-Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top