AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Pfad einer statisch gelinkten DLL herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Pfad einer statisch gelinkten DLL herausfinden

Ein Thema von blackfin · begonnen am 30. Jun 2010 · letzter Beitrag vom 30. Jun 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 09:44
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

Geändert von blackfin (30. Jun 2010 um 09:54 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.873 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 09:53
Wenn sie statisch gelinkt ist, ist sie Teil der Exe. Wenn du frühe Bindung meinst, ist dieser auch nicht fest bestimt
Markus Kinzler
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 09:58
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)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 11:12
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:

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:
By design the DLL search order with static linking includes: the directory from which the application loaded, the system directory, the Windows directory, directories listed in the PATH environment variable.
Note also that the search order might be different for various Windows versions.
The safest is to always expect to have all the DLLs in the directory where the calling application is.
Ist ja schön, wenn der "safest way" der Weg ist, das Applikations-Verzeichnis zu nehmen.
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?

Geändert von blackfin (30. Jun 2010 um 11:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#5

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 11:21
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.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 11:36
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.
Ich habe es eben mal probiert, das geht sogar ohne die DLL nochmal mit LoadLibrary zu laden. Versuch mal das hier:

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;
Tobias
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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