Domanda

  

Possibile duplicato:
   Come posso ottenere l'HMODULE per l'esecuzione in corso codice?

Sto cercando di trovare una risorsa nel mio modulo. Se questo modulo è un eseguibile, è banale - GetModuleHandle (NULL) restituisce l'handle di " main " modulo.

Il mio modulo, tuttavia, è una DLL caricata da un altro eseguibile. Quindi GetModuleHandle (NULL) restituirà l'handle del modulo a quell'eseguibile, che ovviamente non è quello che voglio.

Esiste un modo per determinare l'handle del modulo che contiene il codice attualmente in esecuzione? L'uso del nome della DLL in una chiamata a GetModuleHandle () mi sembra un trucco (e non è facilmente gestibile nel caso in cui il codice in questione venga trapiantato in una DLL diversa).

È stato utile?

Soluzione

Conserva l'handle del modulo quando ti viene dato in DllMain e poi usalo in seguito quando ne hai effettivamente bisogno. Molti framework (ad es. MFC) lo fanno automaticamente.

Altri suggerimenti

Se DLL è collegata con MFC, esiste un modo per ottenere l'istanza della DLL in cui è stata chiamata una funzione:

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

Come è stato già affermato, ciò può essere fatto salvando l'handle del modulo passato nella funzione DllMain.

Ma ci sono altri motivi per cui dovresti salvare l'handle.

Ad esempio, se si decide di associare risorse alla DLL utilizzando il linker risorse, sarà necessario gestire questo modulo per accedere a tali risorse tramite l'API della funzione LoadResource .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top