2008-08-05 14 views
25

Eine Windows-EXE-Datei hat Zugriff auf die Befehlszeichenfolge, die sie aufgerufen hat, einschließlich Pfad und Dateiname. z.B. C:\MyApp\MyApp.exe --help.Kann eine Windows-DLL ihren eigenen Dateinamen abrufen?

Aber dies ist nicht so für eine DLL über LoadLibrary aufgerufen. Kennt jemand einen Weg für eine DLL, um herauszufinden, was sein Pfad und Dateiname ist?

Speziell ich interessiere mich für eine Delphi-Lösung, aber ich vermute, dass die Antwort für jede Sprache so ziemlich die gleiche wäre.

Antwort

35

Ich denke, Sie suchen nach GetModuleFileName.

http://www.swissdelphicenter.ch/torry/showcode.php?id=143:

{ 
    If you are working on a DLL and are interested in the filename of the 
    DLL rather than the filename of the application, then you can use this function: 
} 

function GetModuleName: string; 
var 
    szFileName: array[0..MAX_PATH] of Char; 
begin 
    FillChar(szFileName, SizeOf(szFileName), #0); 
    GetModuleFileName(hInstance, szFileName, MAX_PATH); 
    Result := szFileName; 
end; 

Ungeprüfte obwohl, da ich einige Zeit her mit Delphi gearbeitet :)

+5

SysUtils hat getModuleName - bereits seit D7, glaube ich. –

+2

Ab Delphi XE ist 'GetModuleName' in der * System.pas * -Einheit definiert. – menjaraz

+1

In Delphi 6 ist' Windows' in 'uses'-Klausel zur Definition von' MAX_PATH' erforderlich. – w5m