// Variante 1 (empfohlen; funktioniert auch ohne die Unit Forms)
function ExeNameM(mitPfad: boolean): string;
var
buffer: array[0..max_path - 1] of char;
begin
SetString(result, buffer, GetModuleFileName(0, buffer, max_path));
if not mitPfad then result := ExtractFileName(result);
end;
// Variante 2 (benötigt die Unit Forms)
function ExeNameA(mitPfad: boolean): string;
begin
result := application.exename;
if not mitPfad then result := ExtractFileName(result);
end;
// Variante 3 (alte Methode)
function ExeNameP(mitPfad: boolean): string;
begin
result := paramstr(0);
if not mitPfad then result := ExtractFileName(result);
end;
// Beispielaufruf
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.caption := ExeNameM(false);
end;
// -------------------------------------------------------------------------
// Und hier eine Möglichkeit den Pfad aus einer DLL heraus anzugeben. Es wird
// der Pfad der DLL und nicht der Pfad des aufrufenden Programms ermittelt.
// Getestet mit D4 unter WinME
library Project2;
uses
windows,
SysUtils,
Classes;
type buffer = array[0..max_path - 1] of char;
// hiermit dermittelt die DLL ihren eigenen Standort
function pfad: buffer;
begin
GetModuleFileName(hinstance, result, max_path);
end;
// hiermit gibt die DLL ihren Standort nach außen weiter
exports pfad;
begin
end.
// Und so wird das Ganze dann im Programm aufgerufen:
// Die DLL muß im Path oder im gleichen Ordner stehen.
// Sollten mehrere DLLs gleichen Namens vorhanden sein,
// wird zuerst die im Ordner des aufrufendenden Programms
// bzw. die erste im Pfad gefunden.
type buffx = array[0..max_path - 1] of char;
function pfad: buffx; external 'Project2.dll';
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage(pfad);
end;