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

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

Форма в dll. Пытаюсь разобраться


Страницы:   1 2 3 4

EgorovAlex ©   (2010-03-29 13:13:00) 

Есть такой код библиотеки:


library pDll;

uses
 Windows, SysUtils, Classes, Forms,
 uDll;

{$R *.res}

procedure Show(App: TApplication); stdcall;
var
 DllApp: TApplication;
begin
 DllApp := Application;
 Application := App;
 with TForm.Create(Application) do
 try
   ShowModal;
 finally
   Free;
 end;
 Application := DllApp;
end;

exports
 Show;

begin
end.


Вызываю так:
procedure TFormTest.btnTestDllClick(Sender: TObject);
var
 hLib: THandle;
 Show: procedure(App: TApplication); stdcall;
begin
 @Show := nil;
 hLib := LoadLibrary('pDll.dll');
 if (hLib > 0) then
 try
   @Show := GetProcAddress(hLib, 'Show');
   if (@Show <> nil) then
     Show(Application);
 finally
   FreeLibrary(hLib);
 end;
end;


Первый вызов проходит удачно, а после второго клика на баттоне выскакивает аксесс виолейшн. В чём может быть дело? Форма в dll пустая.

Если процедуру создания формы заменить на:

procedure Show(App: TApplication); stdcall;
begin
 with TForm.Create(App) do
 try
   ShowModal;
 finally
   Free;
 end;
end;


То форма создаётся нормально много раз, только форма теперь не по центру главной формы создаётся, а в центре экрана, а это не устраивает (у формы стоит Position := poMainFormCenter)


EgorovAlex   (2010-03-29 13:36:00) [61]

Сарказм я конечно понимаю, но всё, что я нашёл крутится вокруг приведённого кода :(


Application   (2010-03-29 13:26:00) [62]

>Форма в dll.

Это очень сложно. Поверь. На эту тему материала очень мало. Потому что это очень сложно. Если есть возможность - ищи другие пути. Packages, например. Они почти те же dll, но немного другие, и разработаны, в частности, и для того, чтобы в них размещались формы.

>Пытаюсь разобраться.

Молодец. Вот только, если тебе это действительно интересно, то делай это сам. Вряд ли кто-то тебе подскажет что-то. Потому что это очень сложно. Готовые рабочие решения есть, но с тобой ими никто делиться не будет.


Страницы:   1 2 3 4

Наверх

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