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

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

О формах в DLL [D4, D5]


Servis ©   (2002-05-11 22:14:00) 

Подскажите люди добрые, нам неразумным:"Как добавить форму в DLL-ку и потом из приложения ее открыть? Если такое в принципе возможно. Проблема в том что чем больше форм тем длинее EXE-шник, а не хотелось бы его делать очень большим. Если не затруднит киньте на мыло."


Mystic   (2002-05-12 00:46:00) [1]

Да, если собираешься делать несколько DLL, то лучше включать флажок Build with runtime package в опциях проекта. Вообще эта опция весьма полезна, поскольку в запутанных проектах, например когда DLL пытается рисовать на форме из Exe-шника могут встреться довольно-таки неприятные ошибки вроде Can"t assign TFont to TFont (просто если rtl присутсвует отдельно в dll и приложении, то и объектов TFont два). Как минус - надо с собой тащить еще несколько dll.


[NIKEL]   (2002-05-11 22:28:00) [2]


Это файл Form.dpr, из которого получается DLL:

library Form;
uses
Classes,
Unit1 in "Unit1.pas" {Form1};
exports
CreateMyForm,
DestroyMyForm;
end.


Это его Unit1:

unit Unit1;
interface
[раздел uses и определение класса Form1 поскипаны]
procedure CreateMyForm(AppHandle : THandle); stdcall;
procedure DestroyMyForm; stdcall;
implementation
{$R *.DFM}
procedure CreateMyForm(AppHandle : THandle);
begin
Application.Handle:=AppHandle;
Form1:=TForm1.Create(Application);
Form1.Show
end;
procedure DestroyMyForm;
begin
Form1.Free
end;
end.


Это UnitCall вызывающего EXE-шника:

unit UnitCall;
interface
[раздел uses и определение класса Form1 поскипаны]
procedure CreateMyForm(AppHandle : THandle); stdcall; external "Form.dll";
procedure DestroyMyForm; stdcall; external "Form.dll";
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateMyForm(Application.Handle)
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyMyForm
end;
end.


Наверх

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