Reputation: 103467
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
Reputation: 3242
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.
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
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