![]() |
Pfad einer statisch gelinkten DLL herausfinden
Hallo Experten,
eine kurze Frage: Wie kann ich den aktuellen Pfad einer statisch gelinkten DLL innerhalb des Delphi-Programms herausfinden? Irgendwie stehe ich gerade auf dem Schlauch... Edit: Zudem würde mich interessieren, wie man eine Liste der statisch gelinkten DLL's bekommt (auch innerhalb des Programms). vielen Dank schon mal :) Fin |
AW: Pfad einer statisch gelinkten DLL herausfinden
Wenn sie statisch gelinkt ist, ist sie Teil der Exe. Wenn du frühe Bindung meinst, ist dieser auch nicht fest bestimt
|
AW: Pfad einer statisch gelinkten DLL herausfinden
Ok, falsch ausgedrückt, sorry!
Ich meine die frühe Bindung. Gibt es keine Möglichkeit, nach dem Programmstart herauszufinden, von wo diese geladen wurde? Wenn jetzt z.B. die Applikation die OpenGL32.dll geladen hat, möchte ich gerne wissen, woher sie geladen wurde (also wo der Suchpfad beim Programmstart sie als erstes gefunden und geladen hat) |
AW: Pfad einer statisch gelinkten DLL herausfinden
Ich habe jetzt weiter danach gesucht und gegoogelt...aber einen Weg habe ich bisher nicht gefunden...
Nochmal eine genauere Erklärung: Bei delphi.about.com wird es jedoch auch als "statisches laden" deklariert, wenn man eine dll-funktion so einbindet:
Delphi-Quellcode:
function CircleArea(const radius : double) : double; external 'circle.dll';
Dabei wird die DLL ja nicht Bestandteil der EXE, sondern wird direkt beim Programmstart geladen. Was mich interessiert, ist der Pfad, aus dem diese DLL dann tatsächlich geladen wird. Denn die Suchreihenfolge ist auf den Systemen unterschiedlich: Zitat:
Ich mag aber nun eben wissen, welche DLL genau verwendet wird, wenn es z.B. die gleiche DLL im System32 und im Applikations-Verzeichnis gibt und geladen werden kann. An die Suchreihenfolge-Vorgabe mag ich mich da nicht halten, da sie ja eben unterschiedlich sein kann. Am einen System nimmt er die aus dem System32 zuerst, auf einem anderen aus dem App-Verzeichnis. Und genau das möchte ich nun rausfinden, welche dll benutzt wurde. Das muss doch irgendwie möglich sein? |
AW: Pfad einer statisch gelinkten DLL herausfinden
Du könntest versuchen die DLL (zusätzlich) dynamisch laden (LoadLibrary) und über das zurück gegebene Handle zB per GetModuleFileName dann den Dateinamen ermitteln.
|
AW: Pfad einer statisch gelinkten DLL herausfinden
Zitat:
Delphi-Quellcode:
var
sDLL: String; cHandle: Cardinal; cSize: Cardinal; aFile: array[0..MAX_PATH-1] of char; begin sDLL := 'circle.dll'; cHandle := GetModuleHandle(PAnsiChar(sDLL)); cSize := MAX_PATH; GetModuleFileName(cHandle, aFile, cSize); end; |
AW: Pfad einer statisch gelinkten DLL herausfinden
Zitat:
AFAIK war das im Bereich COM+ |
AW: Pfad einer statisch gelinkten DLL herausfinden
Schade, hätte ja klappen können.
Danke für den Hinweis! |
AW: Pfad einer statisch gelinkten DLL herausfinden
Zitat:
|
AW: Pfad einer statisch gelinkten DLL herausfinden
Danke für die Antworten! :)
Ich hab's jetzt rausgefunden, wie es geht, nämlich mit einem Module Snapshot aus der Tlhelp32:
Delphi-Quellcode:
uses ...,Tlhelp32 ... var FModuleSnapShot: THandle; FModule: TModuleEntry32; FNextModuleAvailable: boolean; begin // Snapshot erzeugen FModuleSnapShot:= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,GetCurrentProcessID); FModule.dwSize := SizeOf(FModule); // Erstes geladenes Modul holen FNextModuleAvailable := Module32First(FModuleSnapShot,FModule); while FNextModuleAvailable do begin // ---------- der Pfad des geladenen Moduls steht nun in FModule.szExePath --------------- // Nächstes geladenes Modul holen, wenn verfügbar FNextModuleAvailable := Module32Next(FModuleSnapShot,FModule); end; // Snapshot freigeben CloseHandle(FModuleSnapShot); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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