![]() |
Dateinamen einer DLL ermitteln
Hallo zusammen,
Gibts es eine Möglichkeit den Dateinamen der laufenden DLL aus der DLL heraus zu ermitteln? Ich hab dazu leider nirgendwo Hinweise gefunden. grüße, daniel |
Re: Dateinamen einer DLL ermitteln
Hier enthalten:
Delphi-Quellcode:
"GetModuleFileName" sollte genau das sein, was Du benötigst
function GetModuleHandleFromInstance: THandle;
var s: array[0..MAX_PATH-1] of char; begin { Find the DLL filename from the instance value. } GetModuleFileName(hInstance, s, sizeof(s)-1); { Find the handle from the filename. } Result := GetModuleHandle(s); end; |
Re: Dateinamen einer DLL ermitteln
Danke dir, das war genau das was ich suchte.
|
Re: Dateinamen einer DLL ermitteln
Und wie kommt man an das Instanzenhandle, wenn man es nicht hat?
Ganz einfach: Man ermittelt die MEMORY_BASIC_INFORMATION einer Variablen in der DLL mit VirtualQuery() und hat mit MEMORY_BASIC_INFORMATION.AllocationBase das Instanzenhandle. |
Re: Dateinamen einer DLL ermitteln
Zitat:
|
Re: Dateinamen einer DLL ermitteln
Zitat:
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). |
Re: Dateinamen einer DLL ermitteln
Das Handle steht doch in hInstance. Ich rufe die Funktion innerhalb der gesuchten dll auf, von daher ists einfach.
|
Re: Dateinamen einer DLL ermitteln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz