Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Форма в Dll   Найти похожие ветки 

 
Alek_1   (2004-05-15 11:29) [0]

Есть приложение, из него вызывается форма через длл.

В длл есть функция которая создает и показывает форму.

function open_client(handle: THandle): boolean; stdcall;
begin
Application.Handle:=handle;
If Not Assigned(Form4) then Form4:=TForm4.Create(Application);
Form4.Show;//Modal;
//FreeAndNil(Form4);
end;

из приложения вызываю эту функцию так:

hLib := LoadLibrary("client_dll.dll");
try
if hLib=0 then
begin
 ShowMessage("Отсутствует библиотека client_dll.dll.");
 exit;
end;
//  GetProcAddress(hLib, "SHOWSETTINGSDIALOG")
open_client:=Topen_client(GetProcAddress(hLib,"open_client"));
IF @open_client=nil then ShowMessage("Íåò àäðåñà")
else open_client(Application.Handle);

Когда я ставлю в функции Form4.ShowModal форма появляется и работает так как нужно. А вот когда ставлю Form4.Show тогда форма не появляется и приложение стает невидимым пока не свернешь его и не развернешь.

Да и еще после закрытия формы из длл приложение стает невидимым пока не свернешь его и не развернешь.

Как с этим бороться?


 
DrPass ©   (2004-05-15 12:02) [1]

Есть подозрение, что у тебя в приложении open_client не описана как stdcall. Т.е. вызываться-то она вызывается, но в качестве дескриптора приложения передается хрен знает что.


 
Alek_1   (2004-05-15 12:25) [2]

Вот здесь я явно передаю дескриптор приложения
open_client(Application.Handle);

Вот тут ловлю и присваиваю его библиотеки.
function open_client(handle: THandle): boolean; stdcall; - тут описана как stdcall
begin
Application.Handle:=handle;


 
DrPass ©   (2004-05-15 12:27) [3]


> function open_client(handle: THandle): boolean; stdcall;
>

Так она объявлена в DLL. Это я вижу и сам. А как она объявлена в приложении?


 
Alek_1   (2004-05-15 12:55) [4]

Вот так она обьявлена в приложениее

Topen_client = function(handle: Thandle): boolean; stdcall;


 
Mim1 ©   (2004-05-15 14:28) [5]

ИМХО надо сам обьект application передовать и screen.
Откомпилить все с использованием bpl - самое простое решение, правда без них потом никуда :).


 
Goida ©   (2004-05-15 14:51) [6]


> Mim1

Можно Screen не передовать. Наверно, даже не нужно. Нужно на Application и главную форму.


 
Mim1 ©   (2004-05-15 14:55) [7]

[6] Goida ©   (15.05.04 14:51)

Сколько людей, столько мнений. Вот только зачем передавать главную форму если это свойство application. Если вы его (обьект application) передадите то кузцец нам уже не нужен :)


 
Alek_1   (2004-05-16 11:30) [8]


> Можно Screen не передовать. Наверно, даже не нужно. Нужно
> на Application и главную форму.


а на главную форму зачем? и если передавать то куда ее цеплять в длл?


 
Goida ©   (2004-05-17 12:37) [9]


> а на главную форму зачем? и если передавать то куда ее цеплять
> в длл?

При создании окна указываете не Application, a Форму...



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
7-1082490727
Fobos
2004-04-20 23:52
2004.05.30
Программное обеспечение для мобилок


7-1082974734
Andrey15777
2004-04-26 14:18
2004.05.30
Запятая при нажатии клавиши . на нумпаде


14-1084443299
Бегун
2004-05-13 14:14
2004.05.30
DVD


3-1084342392
TATIANA
2004-05-12 10:13
2004.05.30
DBImage - ошибка


1-1084606165
Alek_1
2004-05-15 11:29
2004.05.30
Форма в Dll