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

Вниз

Вызов немодальной формы из DLL.   Найти похожие ветки 

 
Maverick ©   (2005-09-08 17:53) [0]

Вызываю немодальную форму из DLL. Если dll загружается статически то все ок. а вот с динамической загрузкой возникли проблемы :( . При вызове формы из главного приложения выдается ошибка "Недопустимый дескриптор окна"

Привожу код :

library FormInDll;
uses
 SysUtils,
 Classes,
 Unit1 in "Unit1.pas" {fMain};

{$R *.res}
exports
 ShowModalForm, ShowForm, FreeForm;
begin
end.

Форма в DLL:
unit Unit1;
interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfMain = class(TForm)
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
 public
 end;

 procedure ShowForm(Appl, Form: THandle); stdcall;
 procedure FreeForm; stdcall;

var
 fMain: TfMain;
 CallForm: THandle; //Дескриптор вызывающей формы

implementation
{$R *.dfm}

procedure ShowForm(Appl, Form: THandle); stdcall;
begin
 Application.Handle:= Appl;
 fMain:= TfMain.Create(Application);
 CallForm:= Form;
 fMain.Show;
end;

procedure FreeForm; stdcall;
begin
 fMain.Free;
end;

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if CallForm <> 0 then
   SendMessage(CallForm, wm_User, 0, 0)
end;
end.

Вызов формы из главного приложения осуществляется так:

procedure TForm1.Button4Click(Sender: TObject);
var
 ShowForm : TShowForm;
 hndDLLHandle: THandle;
begin
 try
   hndDLLHandle := loadLibrary ( "FormInDll.dll" );
   if hndDLLHandle <> 0 then
   begin
     @ShowForm := getProcAddress ( hndDLLHandle, "ShowForm" );
     if Addr(ShowForm) <> nil then
     begin
       ShowForm(Application.Handle, self.Handle);
     end
     else
       showMessage ( "Function not exists..." );
   end
   else
     showMessage ( "DLL not found..." );
 finally
   freeLibrary ( hndDLLHandle );
 end;
end;


 
Игорь Шевченко ©   (2005-09-08 17:59) [1]


> выдается ошибка "Недопустимый дескриптор окна"


В каком месте ?


 
Maverick ©   (2005-09-08 18:10) [2]

что то под вечер я уже туплю :)
ошибка выскакивает на строчке
ShowForm(Application.Handle, self.Handle);
главного приложения, запустив дебагер в dll - ShowForm даже не выполняется.


 
Игорь Шевченко ©   (2005-09-08 18:12) [3]


>  if Addr(ShowForm) <> nil then


if Assigned(ShowForm) then


 
Maverick ©   (2005-09-08 18:18) [4]

не помогло :(


 
Игорь Шевченко ©   (2005-09-08 18:20) [5]


>  procedure ShowForm(Appl, Form: THandle); stdcall;


А тип TShowForm в основном приложении как объявлен ?


 
Maverick ©   (2005-09-08 18:22) [6]

вот так :

type
 TShowForm = procedure (Appl, Form: THandle);


 
Maverick ©   (2005-09-08 18:25) [7]

но ведь если я dll-ку гружу статически то все ок, ни каких ошибок


 
jack128 ©   (2005-09-08 18:27) [8]

Maverick ©   (08.09.05 18:22) [6]
TShowForm = procedure (Appl, Form: THandle);

Maverick ©   (08.09.05 17:53)
procedure ShowForm(Appl, Form: THandle); stdcall;


ps не надо долго перед компьютером сидеть, а то уже совсем зрение посадил..


 
Игорь Шевченко ©   (2005-09-08 18:28) [9]

Maverick ©   (08.09.05 18:22) [6]

type
TShowForm = procedure (Appl, Form: THandle); stdcall;


 
isasa ©   (2005-09-08 18:30) [10]

Недавно был предмет спора, что есть Application в DLL?
...
Application.Handle:= Appl;
fMain:= TfMain.Create(Application);
.....


может так
...
fMain:= TfMain.Create(nil);
...

все равно руками закрываем форму.


 
Maverick ©   (2005-09-08 18:31) [11]

:))
да, спасибо большое:))
действительно вредно сидеть долго перед компом.


 
Игорь Шевченко ©   (2005-09-08 18:31) [12]


> Недавно был предмет спора, что есть Application в DLL?


Спорить не о чем.


 
Maverick ©   (2005-09-08 18:33) [13]

isasa ©   (08.09.05 18:30) [10]

согласен



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1124287843
Anton S.
2005-08-17 18:10
2005.10.02
Вопрос по RichEdit


14-1126265748
TStas
2005-09-09 15:35
2005.10.02
Зачем забанили Юльку?


2-1124489474
naraki
2005-08-20 02:11
2005.10.02
поиск в блакноте


1-1126367827
SergP
2005-09-10 19:57
2005.10.02
Проблемы с установкой глобального хука


14-1126590459
КаПиБаРа
2005-09-13 09:47
2005.10.02
Самая интересная тема