Wie kann ich HINSTANCE finden?
-
Gibt es eine Möglichkeit HINSTANCE meines Programms zu finden? Es ist mir unbequem es als Parameter überall zu übergeben.
-
Benutze eine singleton oder eine globale Variable.
Siehe auch:
http://blog.m-ri.de/index.php/2007/12/12/die-unsitte-immer-getmodulehandlenull-fuer-hinstance-in-createwindow-und-registerclass-zu-verwenden/
-
Ich habe eine leichtere Lösung gefunden. Während WM_CREATE gibt mir LPARAM sehr viele Sachen mit...
hInst = reinterpret_cast<CREATESTRUCT*>(lp)->hInstance;Trotzdem danke!
-
HMODULE mDllMod = (HMODULE) __ImageBase;Falls __ImageBase nicht definiert sein sollte, dann noch:
extern "C" LPVOID __ImageBase;
-
Zdravko schrieb:
Ich habe eine leichtere Lösung gefunden. Während WM_CREATE gibt mir LPARAM sehr viele Sachen mit...
hInst = reinterpret_cast<CREATESTRUCT*>(lp)->hInstance;Trotzdem danke!
Wenn Du eine EXE alleine hast und Fensterklassen nicht über Module und DLLs verteilt sind, dann mag das gehen...
Hängt aber davon ab was der Caller da rein schreibt
-
Funktioniert auch in DLLs:
HINSTANCE GetHinstance(VOID) { MEMORY_BASIC_INFORMATION mbi = { 0 }; VirtualQuery(GetHinstance, &mbi, sizeof(mbi)); return(reinterpret_cast<HINSTANCE>(mbi.AllocationBase)); }
-
Gästchen schrieb:
Funktioniert auch in DLLs:
HINSTANCE GetHinstance(VOID) { MEMORY_BASIC_INFORMATION mbi = { 0 }; VirtualQuery(GetHinstance, &mbi, sizeof(mbi)); return(reinterpret_cast<HINSTANCE>(mbi.AllocationBase)); }Hast Du den Link gelesen, den Martin Richter gepostet hat?
Dort ist genau Dein Vorschlag erklärt worden, mit dem eindringlichen Hinweis "Aber bitte diesen Code nicht in eine DLL auslagern!"Martin
-
er meint damit das man nicht eine extra dll nur mit dieser funktion drin schreiben soll^^
-
In dem Artikel, den ich geschrieben habe steht alles drin.
Die diskutierte Funktion muss inline sein, oder in dem Executable liegen, von der man HINSTANCE ermitteln will.
Grundsätzlich empfiehlt sich ein Singleton oder eine globale Variable wie es ATL und MFC macht. Wer es unbedingt ander macht, muss sich gewahr sein, für was HINSTANCE an dieser Stelle verwendet wird.
Besonders eben bei CreateWindow ist es nicht trivial!
Aber ich habe keine Lust alles nochmal zu schreiben was in dem Artikel steht...
-
Mmacher schrieb:
Hast Du den Link gelesen, den Martin Richter gepostet hat?
Nö, wenn ich was von blog lese, schaue ich dort normalerweise nicht rein.
-
Gästchen schrieb:
Mmacher schrieb:
Hast Du den Link gelesen, den Martin Richter gepostet hat?
Nö, wenn ich was von blog lese, schaue ich dort normalerweise nicht rein.
Ich verstehe was Du meinst, in der Tat sind viele Blogs oftmals nur idiotisches Gekrakel (sorry für den Ausdruck).
Aber der Blog von Martin Richter ist für mich qualitativ sehr hochwertig (und obendrein auch noch übersichtlich gehalten, was nicht selbstverständlich ist).Genauso der Blog von Raymond Chen (aka "The Old New Thing"), auch wenn es dort zugegebenermaßen recht unübersichtlich ist. Wenn es z.B. um Windows-Interna geht mußt Du dort ein wenig fummelig suchen.
Just my 5 cents,
Martin