Zitat von
Luckie:
Warum so kompliziert? LoadLibrary aufrufen. Ist sie bereits geladen bekommt man das
Handle der schon geladenen
DLL zurück. Ist sie noch nicht geladen, bekommt man eben ein frisches
Handle zurück.
Der Philosoph, der tritt herein,
Und beweist euch, es müßt' so seyn:
Das Erst' wär' so, das Zweite so,
Und drum das Dritt' und Vierte so;
Und wenn das Erst' und Zweit' nicht wär',
Das Dritt' und Viert' wär' nimmermehr.
Viel Glück dabei einen Trick zu finden, wie die aktuell geladene
DLL heißt, wenn sie weder einen festen Namen noch einen festen Pfad hat. Dann verpufft nämlich dein lustiger LoadLibrary()-Aufruf, denn du weißt ja garnicht welche
DLL geladen wurde (oder willst du alle im System vorhandenen so prüfen???). Angenommen du hättest den Namen: Gibst du einen Pfad zur
DLL mit an, oder vertraust du auf die Windowsmethode zum Finden der
DLL? In letzterem Fall könntest du *padauz* wegen SetDllDirectory() ziemlich auf die Nase fallen.
Und GetModuleHandle() funktioniert für DLLs sowieso nicht.
Erst mit GetModuleHandleEx() und GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS wurde obige von mir beschriebene Methode eingeführt - was aber erst ab Windows XP funktioniert.
Deine sogenannte Einfachheit ist also weder praktikabel (da die
DLL nicht weiß wo sie liegt oder wie sie heißt) noch sinnvoll (wenn die
DLL vorher nicht geladen war, mit der wir testen).