Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизBPL Найти похожие ветки
← →
ORMADA © (2004-09-13 14:04) [0]Доб день!
Вот стал юзать BPL и задался вопросом как программно можно узнать какие bpl использует в своей работе моя bpl.
Обычно делаю так вызываю bpl на машине на которой дельфи не было и в помине и при запуске ф-ии из bpl программа выдаёт что такие то bpl не найдены, вот так по одной их и собираю.
может можно как то программно узнать имена bpl ?
← →
Reindeer Moss Eater © (2004-09-13 14:12) [1]1. Project-Options
2. Ctrl+F + Find in files + "LoadPackage"
← →
ORMADA © (2004-09-13 14:50) [2]Reindeer Moss Eater :)
вопрос в том как это сделать программно
т.к. у меня могут быть bpl созданные другими разработчиками из команды
← →
ORMADA © (2004-09-14 08:07) [3]Вот нашёл пример работы с PackageInfo
но всё равно он выдаёт не все НЕОБХОДИМЫЕ BPL
проверял на своей bpl ей надо 18 bpl для работы а программы находит только 13, почему ?
program PkgInfo;
uses
Forms,
Dialogs,
SysUtils,
PkgMain in "PkgMain.pas" {PackInfoForm};
{$R *.RES}
var
OpenDialog: TOpenDialog;
begin
if (ParamCount > 0) and FileExists(ParamStr(1)) then
PkgName := ParamStr(1)
else
begin
OpenDialog := TOpenDialog.Create(Application);
OpenDialog.DefaultExt := "*.bpl";
OpenDialog.Filter := "Packages (*.bpl)|*.bpl|Delphi 3 Packages " +
"(*.dpl)|*.dpl";
if OpenDialog.Execute then
PkgName := OpenDialog.FileName;
end;
if PkgName <> "" then
begin
Application.Initialize;
Application.CreateForm(TPackInfoForm, PackInfoForm);
Application.Run;
end;
end.
unit PkgMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TPackInfoForm = class(TForm)
GroupBox1: TGroupBox;
DsgnPkg: TCheckBox;
RunPkg: TCheckBox;
BuildCtl: TRadioGroup;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button1: TButton;
Label1: TLabel;
DescEd: TEdit;
memContains: TMemo;
memRequires: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
PackInfoForm: TPackInfoForm;
PkgName: string; // This is assigned in project file
implementation
{$R *.DFM}
procedure PackageInfoCallback(const Name: string; NameType: TNameType;
Flags: Byte; Param: Pointer);
var
AddName: string;
Memo: TMemo;
begin
Assert(Param <> nil);
AddName := Name;
case NameType of
ntContainsUnit: Memo := TPackInfoForm(Param).memContains;
ntRequiresPackage: Memo := TPackInfoForm(Param).memRequires;
else
Memo := nil;
end;
if (Memo <> nil) then
begin
if Memo.Text <> "" then
AddName := ", " + AddName;
Memo.Text := Memo.Text + AddName;
end;
end;
procedure TPackInfoForm.FormCreate(Sender: TObject);
var
PackMod: HMODULE;
Flags: Integer;
begin
// Since we only need to get into the package"s resources,
// LoadLibraryEx with LOAD_LIBRARY_AS_DATAFILE provides a speed-
// efficient means for loading the package.
PackMod := LoadLibraryEx(PChar(PkgName), 0, LOAD_LIBRARY_AS_DATAFILE);
if PackMod = 0 then
Exit;
try
GetPackageInfo(PackMod, Pointer(Self), Flags, PackageInfoCallback);
finally
FreeLibrary(PackMod);
end;
Caption := "Package Info: " + ExtractFileName(PkgName);
DsgnPkg.Checked := Flags and pfDesignOnly <> 0;
RunPkg.Checked := Flags and pfRunOnly <> 0;
if Flags and pfNeverBuild <> 0 then
BuildCtl.ItemIndex := 1;
DescEd.Text := GetPackageDescription(PChar(PkgName));
end;
procedure TPackInfoForm.Button1Click(Sender: TObject);
begin
Close;
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c