Generelles Problem: hInstance ist lokal in WinMain
-
Was mir bei meinen Basteleien immer auffällt, sind die "Nachteile" der lokal gehaltenen hInstance in der WinMain. Ich hab die mal global gemacht, also zusätzlich noch in eine globale Variable geschrieben. Hab mir dann auch Quellcodes von paar OpenSource-Projekten angesehen, wo das genau auch der Fall war.
Ist das eher etwas, das man vermeiden sollte, oder gängige Praxis?
-
kannst dir auch auf viele andere möglichkeiten holen, GetModuleHandle z.b. und irgendwo steht die auch noch drin, da hatte jochen mal irgendsoeinen coolen trick geposted, musste mal suchen.
-
rofler schrieb:
GetModuleHandle
ohje...nich gut...
ich verweise hier mal auf Martin Richters Blog:
dieser aufschlussreicher eintrag sollte denkanstöße geben

es gibt wie immer bei der WinAPI (oder überhaupt) mehrere möglichkeiten, etwas zu tun. so auch mit dem Wert von hInstance.
so schlimm ist in diesem fall eine globale variable nicht.
du kannst sie allerdings auch jeder funktion, die sie brauch, übergeben, so sparst du dir auch die globale variable. oder du vermeidest den direkten zugriff auf die globale variable über eine funtion:// WARNUNG: ohne jegliche fehlerüberprüfung // data.h void InitInstance(HINSTANCE hInst); HINSTANCE MyGetInstance(void);// data.c HINSTANCE g_hInst = NULL; void InitInstance(HINSTANCE hInst) { g_hInst = hInst; } HINSTANCE MyGetInstance(void) { return g_hInst; }InitInstance rufst du dann z.b. in WinMain auf ... vorteil dabei -> egal ob du code für eine .exe oder .dll schreibst, oder code für eine .exe später in eine .dll auslagst, so du musst dich um keine globale variable kümmern, du musst nicht alle, aufrufe von GetModuleHandle(NULL), wie rofler erwähnte, ersetzen in der .dll. kurz: du hast eine einheitliche API.
grüße, xantus
-
doll das mag bestimmt richtig sein, nur wenn ich GetModuleHandle mit NULL aufrufe, kriege ich immer noch das module handle der exe datei, also dat was er will. dat steht so in der msdn und dat wird 100%ig das gleiche sein, was er in seiner WinMain kriegt. also was willst du mir damit sagen?
-
Solange GetModuleHandle(NULL) immer in der EXE aufgerufen wird, ist nichts dagegen einzuwenden. Die Probleme fangen erst an, wenn die Aufrufe aus einer DLL erfolgen.
-
das wusste ich auch scho vor diesem thread
-
d.h. ne war es nicht, die info war schon wissenswert
-
Ich weiss garnicht was hier immer für eine Welle mit globalen Variblen gemacht wird. Ich speichere immer meine HINSTANCE beim Aufruf von WinMain, und wenn ich mein Hauptfenster und meine Childfenster erstelle bekommen die auch immer einen globalen Handle, mir fällt auch kein Grund ein warum man es anderst machen soll.
-
lolrollo
-
Frickelhans schrieb:
Ist das eher etwas, das man vermeiden sollte, oder gängige Praxis?
Hi Bruder !
Wenn du bedenken hast, das etwas von ausserhalb an deiner globalen Variable knabbern könnte, dann mach die doch einfach static.