Comment obtenir le descripteur de module de mon propre code? [dupliquer]

StackOverflow https://stackoverflow.com/questions/119706

  •  02-07-2019
  •  | 
  •  

Question

  

Double possible:
   Comment obtenir le HMODULE pour l'exécution en cours code?

J'essaie de trouver une ressource dans mon propre module. Si ce module est un exécutable, c’est trivial - GetModuleHandle (NULL) renvoie le descripteur de la commande "main". module.

Mon module, cependant, est une DLL chargée par un autre exécutable. Ainsi, GetModuleHandle (NULL) renverra le descripteur de module à cet exécutable, ce qui n'est évidemment pas ce que je veux.

Est-il possible de déterminer le descripteur de module du module contenant le code en cours d'exécution? Utiliser le nom de la DLL dans un appel à GetModuleHandle () me semble être un hack (et n'est pas facilement maintenable si le code en question est transplanté dans une autre DLL).

Était-ce utile?

La solution

Stockez le module à distance quand il vous est donné dans DllMain, puis utilisez-le plus tard, lorsque vous en aurez réellement besoin. De nombreux frameworks (par exemple, MFC) le font automatiquement.

Autres conseils

Si la DLL est liée à MFC, il existe un moyen d'obtenir une instance de la DLL dans laquelle une fonction a été appelée:

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

Comme cela a déjà été dit, cela peut être fait en enregistrant le descripteur de module transmis à la fonction DllMain.

Mais il existe d'autres raisons pour lesquelles vous devriez enregistrer le descripteur.

Par exemple, si vous décidez de lier des ressources à la DLL à l'aide de l'éditeur de liens, vous aurez besoin de ce descripteur de module pour accéder à ces ressources via l'API de fonction LoadResource .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top