我正在为我的应用程序创建一个“版本信息”对话框;类似于 Delphi 在“关于”对话框中的内容。我只想显示运行时包(.BPL
文件)的版本信息,而不是所有加载的 DLL。是否RTL
包含函数来获取已加载包的列表,或者我必须使用该EnumProcessModules
函数并过滤结果?
提前致谢...
我正在为我的应用程序创建一个“版本信息”对话框;类似于 Delphi 在“关于”对话框中的内容。我只想显示运行时包(.BPL
文件)的版本信息,而不是所有加载的 DLL。是否RTL
包含函数来获取已加载包的列表,或者我必须使用该EnumProcessModules
函数并过滤结果?
提前致谢...
您可以使用EnumModules 中的函数System
。
这是一个非常简单的演示,说明如何使用该EnumModules
函数并获取所有已加载的名称BPL's
。它是一个控制台应用程序,但代码可以很容易地在生产应用程序中重用。如果您想对其进行测试,请确保您使用的是软件包:
program Project17;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes, Windows;
function EnumModulesFunc(HInstance: Integer; Data: Pointer): Boolean;
var Buff:array[0..1023] of char;
begin
if GetModuleFileName(HInstance, @Buff, SizeOf(Buff)) = ERROR_INSUFFICIENT_BUFFER then
Buff[High(Buff)] := #0;
TStringList(Data).Add(Buff);
end;
var L: TStringList;
begin
try
L := TStringList.Create;
try
System.EnumModules(EnumModulesFunc, L);
WriteLn(L.Text);
finally L.Free;
end;
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.