2013-02-11 3 views
5

내 응용 프로그램에 대한 "버전 정보"대화 상자를 만들고 있습니다. 델파이가 "정보"대화 상자에 가지고있는 것과 비슷한 것입니다. 런타임 패키지 (.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. 
관련 문제