![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ссылки-невозвращенцы из BPL [D7]
mfender © (2010-09-18 07:43:00)Странная какая-то беда творится.
{Есть объект, упакованный в паккагу edforms.bpl}
unit formEditAttributesSan;
type
TfrmEditAttributesSan = class(TForm)
sDBEdit1: TsDBEdit;
end;
implementation
initialization
RegisterClass (TfrmEditAttributesSan);
{Есть код, подгружающий это дело, и призванный получить эту форму, что-то сделать и всё удалить.
Чтобы не убить остатки манной каши в голове, я просто таки скопипастил у Марко Кэнту код после нескольких часов недоумения, подрисовав туда свои значения}
procedure TAttrsSan.InsertEdit(Caption: string);
var
frmEditAttributesSan: TForm;
FormClass: TFormClass;
HandlePack: HModule;
begin
HandlePack := LoadPackage('edforms.bpl');
if HandlePack > 0 then
begin
{Вот до сюдова всё работает. Т.е. HandlePack есть, всё подгрузилось}
FormClass := TFormClass(GetClass('TfrmEditAttributesSan'));
{А вот тут неясные грабли: FormClass всегда равен nil, и разумеется, дальнейшие движения проходят мимо.}
if Assigned(FormClass) then
begin
frmEditAttributesSan := FormClass.Create(Application);
try
if frmEditAttributesSan.ShowModal = mrOk then
showmessage('Оно тут было');
finally
frmEditAttributesSan.Free;
end;
end;
UnloadPackage(HandlePack);
end
else
Showmessage('Package not found');
end;
Срисовал из его (Марко Кэнту) примеров. И что характерно, его-то примеры работают! Моё - не работает, несмотря на то, что не нашёл я ни одного отличия в коде, проведя долгий побуквенный анализ написанного у него и у меня... Застрэлиться что-ли?
Игорь Шевченко (2010-09-18 16:39:00) [1]
> {Вот до сюдова всё работает. Т.е. HandlePack есть, всё подгрузилось}
>
> FormClass := TFormClass(GetClass('TfrmEditAttributesSan'));
>
>
> {А вот тут неясные грабли: FormClass всегда равен nil, и
> разумеется, дальнейшие движения проходят мимо.}
потому что секция initialization при динамической загрузке пакета не выполнилась.
Ega23 (2010-09-18 10:07:00) [2]
> То есть, если я правильно понял, для того, чтобы это работало,
> нужно таскать всю пачку BPL вместе с программой, а компилировать
> exe вместе со всеми этими RTL?
Скажи, а нафига тебе отдельная bpl? Что мешает просто в uses подключить и использовать?
mfender (2010-09-18 09:06:00) [3]То есть, если я правильно понял, для того, чтобы это работало, нужно таскать всю пачку BPL вместе с программой, а компилировать exe вместе со всеми этими RTL?
mfender (2010-09-18 07:51:00) [4]Да, добавлю: FindClass() как водится сообщает об ошибке ---------------------------
Project <.....> raised exception class EClassNotFound with message 'Class TfrmEditAttributesSan not found'.