Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ссылки-невозвращенцы из 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'.


Наверх

Титульная страница Поиск, карта сайта Написать письмо