![]() |
Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Ich hab ein kleines Problem...
Meine DLL wird von einem fremden Programm dynamisch gebunden und eine Funtion daraus aufgerufen. Nun habe ich das Problem, dass ich gern die Versionsnummer meiner DLL auslesen würde, aber ich weiß eben nicht, wo sich die DLL genau befindet :roll: , wie bekomme ich nun den genauen Pfad + Dateinamen (ja die dll könnte auch umbenannt worden sein) heraus? |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
![]() |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
oder gleich GetModuleName welches auf die gepostete funktion aufbaut.
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Aua aua aua ... da haben wohl zwei nicht gelesen.
Ich poste die Lösung gleich. Hatte ich schonmal hier in der Sparte gepostet. Moment! |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
warum nicht gelesen? den genauen Pfad der DLL (inklusive Dateinamen) bekommt man so. Und wie er die Versionsnummer ausliest weiß er doch.
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Was wenn er kein hInstance hat? Hast du die Lösung dann? :mrgreen:
Voila, das hatte ich doch schonmal unter anderem Namen (Mephistopheles) beantwortet: ![]() Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
in der DLL ist doch HInstance immer global vorhanden :wink:
er will ja innerhalb der DLL von eben dieser den Dateinamen und somit ist auch die HInstance bekannt. |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Danke, jetzt hab ich's
Delphi-Quellcode:
var
... DllName: array[0..MAX_PATH-1] of char; begin GetModuleFileName(hInstance, DllName, sizeof(DllName)-1); ... |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
ok, ich hab das jetzt mal so probiert:
Delphi-Quellcode:
was ist jetzt falsch?
var a: TMemoryBasicInformation;
LBuffer: String; begin FillChar(a, SizeOf(a), 0); VirtualQuery(@a, a, SizeOf(a)); SetLength(LBuffer, MAX_PATH); GetModuleFileName(Cardinal(a.AllocationBase), PChar(LBuffer), Length(LBuffer)); showmessage(LBuffer); |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
So war es gemeint:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Path: String; begin Setlength(Path, MAX_PATH+1); Setlength(Path, GetModuleFileName(HInstance, PChar(Path), MAX_PATH)); ShowMessage(Path); end; |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
a.AllocationBase weicht von HInstance ab.
a.AllocationBase ist immer $3000 |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Dann stimmt was an deinem Code nicht :-D
Ich gucke es mir morgen vielleicht mal an. Bin jetzt gerade dabei Luckie zu helfen. |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
ich habs gefunden, wenn ich bei VirtualQuery als ersten Parameter die Adresse einer globalen Angebe funktioniert es, nur eben bei der lokalen Variablen nicht.
es sieht jetzt also wie folgt aus
Delphi-Quellcode:
[...]
implementation {$R *.dfm} var GlobalVar: Cardinal; procedure TForm1.FormCreate(Sender: TObject); var QueryRes: TMemoryBasicInformation; LBuffer: String; begin VirtualQuery(@GlobalVar, QueryRes, SizeOf(QueryRes)); SetLength(LBuffer, MAX_PATH); SetLength(LBuffer, GetModuleFileName(Cardinal(QueryRes.AllocationBase), PChar(LBuffer), Length(LBuffer))); showmessage(String(LBuffer)); end; |
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
Zitat:
|
Re: Pfad+Name der aktuellen DLL aus DLL heraus ermitteln...
schöner ist es vielleicht wenn man eine funktion draus macht:
Delphi-Quellcode:
function GetModulePath: String;
var QueryRes: TMemoryBasicInformation; LBuffer: String; begin VirtualQuery(@GetModulePath, QueryRes, SizeOf(QueryRes)); SetLength(LBuffer, MAX_PATH); SetLength(LBuffer, GetModuleFileName(Cardinal(QueryRes.AllocationBase), PChar(LBuffer), Length(LBuffer))); result := LBuffer; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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 by Thomas Breitkreuz