![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форма в dll. Пытаюсь разобраться
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, но немного другие, и разработаны, в частности, и для того, чтобы в них размещались формы.
>Пытаюсь разобраться.
Молодец. Вот только, если тебе это действительно интересно, то делай это сам. Вряд ли кто-то тебе подскажет что-то. Потому что это очень сложно. Готовые рабочие решения есть, но с тобой ими никто делиться не будет.