2013-02-11 66 views
5

我正在爲我的應用程序創建「版本信息」對話框;類似於Delphi在「關於」對話框中所具有的功能。我想僅顯示運行時軟件包(.BPL文件)的版本信息,而不是所有加載的DLL。 RTL是否包含函數來獲取已加載包的列表,或者我必須使用EnumProcessModules函數並過濾結果?如何獲取加載的運行時包的列表?

在此先感謝...

回答

7

您可以從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. 
相關問題