Pergunta

Duplicate possíveis:
Como faço para obter o HMODULE para o atualmente em execução código?

Eu estou tentando encontrar um recurso em meu próprio módulo. Se este módulo é um executável, isso é trivial -. GetModuleHandle(NULL) retorna a alça do módulo "principal"

O meu módulo, no entanto, é uma DLL que é carregada por um outro executável. Então GetModuleHandle(NULL) voltará a alça do módulo para que executável, o que obviamente não é o que eu quero.

Existe alguma maneira para determinar o identificador módulo do módulo que contém o código atualmente em execução? Usando o nome do DLL em uma chamada para GetModuleHandle() parece ser um hack para mim (e não é de fácil manutenção, caso o código em questão é transplantado para um DLL diferente).

Foi útil?

Solução

Guarde a alça do módulo para longe quando ele é dado a você em DllMain e usá-lo mais tarde, quando você realmente precisa dele. Um monte de estruturas (por exemplo, MFC) fazer isso automaticamente.

Outras dicas

Se DLL está relacionada com MFC, em seguida, há uma maneira de obter instância da DLL em que alguma função foi chamado:

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

Como já foi dito isto pode ser feito salvando a alça do módulo passado para a função DllMain.

Mas há outras razões pelas quais você deve salvar a alça.

Por exemplo, se você decidir recursos de vinculação para a DLL usando o vinculador de recursos, você vai precisar deste alça do módulo para chegar a estes recursos através do LoadResource função API.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top