Blorgbeard
Blorgbeard

Reputation: 103467

Can a Windows dll retrieve its own filename?

A Windows process created from an exe file has access to the command string that invoked it, including its file's path and filename. eg. C:\MyApp\MyApp.exe --help.

But this is not so for a DLL invoked via LoadLibrary. Does anyone know of a way for a function loaded via DLL to find out what its path and filename are?

Specifically, I'm interested in a solution using the Delphi Programming Language, but I suspect that the answer would be pretty much the same for any language.

Upvotes: 34

Views: 10733

Answers (2)

Shaun Roselt
Shaun Roselt

Reputation: 3242

Delphi XE+

In newer versions of Delphi, you can simply use the GetModuleName function from System.SysUtils. You simply pass in hInstance as the parameter.

So the full code would be GetModuleName(hInstance) to get the DLL filename path.

Older than Delphi XE

With older versions of Delphi, you need to write your own function for this:

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

Upvotes: 1

Michael Stum
Michael Stum

Reputation: 180934

I think you're looking for 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;

Untested though, been some time since I worked with Delphi :)

Upvotes: 41

Related Questions