Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi application.exename für DLLs? (https://www.delphipraxis.net/139703-application-exename-fuer-dlls.html)

Marco Steinebach 3. Sep 2009 11:54


application.exename für DLLs?
 
Hallo zusammen,
in einer DLL möchte ich gerne herausfinden, in welchem Verzeichnis sie liegt, also ein Äquivalent zu Application.ExeName. Gibt es sowas und wenn ja, wie mach ich das?
Viele Grüße
Marco

sirius 3. Sep 2009 12:09

Re: application.exename für DLLs?
 
"getmodulename"
oder
"paramstr(0)"

hoika 3. Sep 2009 12:15

Re: application.exename für DLLs?
 
Hallo,

ich mache das so

Delphi-Quellcode:
var
  szDllName: array[0..255] of Char;
  sDllName : String;
begin
  GetModuleFileName(HInstance, szDllName, SizeOf(szDllName)-1);
  sDllName:= StrPas(szDllName);

Und ja, man kann auch SetLength benutzten,
uss man aber nicht ;)


Heiko

himitsu 3. Sep 2009 12:18

Re: application.exename für DLLs?
 
Im Prinzip (egal ob EXE oder DLL):

man hole sich einen Pointer innerhalb des gewünschten Moduls
z.B. die Adresse einer Funktion (vorzugsweise der Funktion, worin man das grad abfragt)
oder die Adresses eines Labels (siehe Delphi-Referenz durchsuchenGOTO)

Delphi-Quellcode:
P := @FunctionsName;

// oder
label Test;
begin
  Test:
  P := @Test;
dann frage man mit VirtualQuery nach nach der Base-Adresse des Speicherblocks
(in diesem Fall der Anfangsadresse der FileImages, worin der gefundene Pointer liegt)

diese BaseAdress entspricht zufällig dem Handle der DLL/EXE

und nun einfach nur noch MSDN-Library durchsuchenGetModuleName mit diesem Handle(Adresse)

Marco Steinebach 3. Sep 2009 16:19

Re: application.exename für DLLs?
 
Hallo,
vielen Dank für die superschnellen Antworten.

ParamStr(0) geht nicht, hätte mich auch gewundert. ;-)

@Heiko: ich hab’s jetzt wie du gelöst, und es tut, was es soll.
@himitsu: Uaaa, gibt’s bei deiner Lösung ‚nen Vorteil, wenn GetModuleFileName (hInstance,... bereits das richtige liefert? Nicht, daß ich da was im Arbeitsspeicher kaputprogrammiere...
Vielen Dank nochmal und viele Grüße
Marco

himitsu 3. Sep 2009 16:29

Re: application.exename für DLLs?
 
Zitat:

Zitat von Marco Steinebach
ParamStr(0) geht nicht, hätte mich auch gewundert. ;-)

Wenn Borland damals HInstance statt 0 dem GetModuleHandle übergeben hätte, dann wäre es schon gegangen,
aber 0 steht halt für die Application.

ParamStr(0) ruft GetModuleName(0, auf, wärend ParamStr(x) mit x > 0 den ParameterBlock ausließt

Zitat:

Zitat von Marco Steinebach
@himitsu: Uaaa, gibt’s bei deiner Lösung ‚nen Vorteil, wenn GetModuleFileName (hInstance,... bereits das richtige liefert? Nicht, daß ich da was im Arbeitsspeicher kaputprogrammiere...

neee, 'nen Vorteil hat's nicht, außer daß man so auch die Namen von anderen Modulen erfragen kann (man muß ja nicht unbedingt 'nen Ausgangs-Pointer im eigenen Code nehmen :stupid: )

Aber kaputt kann da nichts gehen, schließlich wird ja nur abgefragt und nix geändert.

hoika 3. Sep 2009 18:34

Re: application.exename für DLLs?
 
Hallo,

ich nehme den Code immer, um in DLL's in Formularen
die Versions-Nummer anzuzeigen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz