2013-02-11 4 views
5

Я создаю диалоговое окно «Информация о версии» для своих приложений; что-то похожее на то, что Delphi имеет в диалоговом окне «О программе». Я хотел бы отображать информацию о версии только для пакетов времени выполнения (.BPL), а не для всех загруженных DLL. Включает ли RTL функции для получения списка загруженных пакетов, или мне нужно использовать функцию EnumProcessModules и фильтровать результат?Как получить список загруженных пакетов времени выполнения?

Спасибо заранее ...

ответ

7

Вы можете использовать функцию 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. 
Смежные вопросы