5
我正在爲我的應用程序創建「版本信息」對話框;類似於Delphi在「關於」對話框中所具有的功能。我想僅顯示運行時軟件包(.BPL
文件)的版本信息,而不是所有加載的DLL。 RTL
是否包含函數來獲取已加載包的列表,或者我必須使用EnumProcessModules
函數並過濾結果?如何獲取加載的運行時包的列表?
在此先感謝...
我正在爲我的應用程序創建「版本信息」對話框;類似於Delphi在「關於」對話框中所具有的功能。我想僅顯示運行時軟件包(.BPL
文件)的版本信息,而不是所有加載的DLL。 RTL
是否包含函數來獲取已加載包的列表,或者我必須使用EnumProcessModules
函數並過濾結果?如何獲取加載的運行時包的列表?
在此先感謝...
您可以從System
使用EnumModules功能。
下面是一個非常簡單的演示,說明如何使用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.