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
Benutzerbild von joachimd
joachimd

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

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10: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
 
#2

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10: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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10:42
Ich habe es eben mal probiert, das geht sogar ohne die DLL nochmal mit LoadLibrary zu laden. Versuch mal das hier:

[DELPHI]
...
cHandle := GetModuleHandle(PAnsiChar(sDLL));
...
Sollte man nicht so machen (jedenfalls wenn die DLL's nicht aus dem eigenen Hause kommt. Borland hat sich durch sowas mal ins eigene Knie geschossen als in neueren Windows-Versionen bestimmte DLL's umbenannt wurden. LoadLibrary wurde von MS entsprechend angepaßt das die neue DLL (mit anderen Namen) geladen wurde. Die Implementierung von Borland hatte hier versagt da bei GetModuleHandle kein gültiges Handle zurück geliefert wurde da hier der Umleidungsmodus von MS nicht implementiert wurde.

AFAIK war das im Bereich COM+
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Leonard

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

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10:45
Schade, hätte ja klappen können.

Danke für den Hinweis!
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10:47
Schade, hätte ja klappen können.
Ein LoadLibrary stört ja auch nicht. Die DLL wird ja kein zweites mal geladen sondern nur der "Referenzzähler" hochgezählt so das bei einem FreeLibrary erst die DLL beim zurücksetzen des Zählers auf 0 entladen wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: Pfad einer statisch gelinkten DLL herausfinden

  Alt 30. Jun 2010, 10:55
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;

Geändert von blackfin (30. Jun 2010 um 10:58 Uhr)
  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 01:49 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