¿Cómo obtener el identificador del módulo de mi propio código?[duplicar]

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Posible duplicado:
¿Cómo obtengo el HMODULE para el código que se está ejecutando actualmente?

Estoy intentando encontrar un recurso en mi propio módulo.Si este módulo es un ejecutable, eso es trivial. GetModuleHandle(NULL) devuelve el identificador del módulo "principal".

Mi módulo, sin embargo, es una DLL que carga otro ejecutable.Entonces GetModuleHandle(NULL) devolverá el identificador del módulo a ese ejecutable, que obviamente no es lo que quiero.

¿Hay alguna forma de determinar el identificador del módulo que contiene el código que se está ejecutando actualmente?Usar el nombre de la DLL en una llamada a GetModuleHandle() Me parece un truco (y no es fácil de mantener en caso de que el código en cuestión se trasplante a una DLL diferente).

¿Fue útil?

Solución

Guarde el identificador del módulo cuando se lo entreguen en DllMain y luego utilícelo más tarde cuando realmente lo necesite.Muchos marcos (por ejemplo, MFC) hacen esto automáticamente.

Otros consejos

Si la DLL está vinculada con MFC, entonces hay una manera de obtener una instancia de la DLL en la que se llamó alguna función:

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

Como ya se ha dicho, esto se puede hacer guardando el identificador del módulo pasado a la función DllMain.

Pero hay otras razones por las que deberías guardar el identificador.

Por ejemplo, si decide vincular recursos a la DLL utilizando el vinculador de recursos, necesitará este identificador de módulo para acceder a estos recursos a través del Cargar recurso función API.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top