5

アプリケーション用の[バージョン情報]ダイアログボックスを作成しています。Delphiの[バージョン情報]ダイアログボックスにあるものと似ています。.BPLロードされたすべてのDLLではなく、ランタイムパッケージ(ファイル)のバージョン情報のみを表示したいのですが。RTLロードされたパッケージのリストを取得するための関数が含まれていますか、それとも関数を使用してEnumProcessModules結果をフィルタリングする必要がありますか?

前もって感謝します...

4

1 に答える 1

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.
于 2013-02-11T12:25:05.657 に答える