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

DmiSb ©   (2006-10-23 11:28:00) 

Никак не пойму, почему при закрытии немодальной формы из динамически загруженной DLL вылетает AV

Код DLL :

library MyLIB;

uses
 SysUtils,
 Classes,
 Windows,
 Forms,
 ibase,
 LIBFormU in 'LIBFormU.pas' {LibF};

procedure LibFormShow(HApp, HForm: THandle); stdcall;
begin
 Application.Handle := HApp;
 if Assigned(LibF) then
   LibF.Show
 else begin
   LibF:=TLibF.Create(Application);
   LibF.CallForm:=HForm;
   LibF.Show;
 end;
end;

procedure LibFormFree; stdcall;
begin
 LibF.Free;
end;

exports LibFormShow;
exports LibFormFree;

begin
end.

Кусок кода основной программы:

 TLibFormShow = procedure(HApp, HForm: THandle); stdcall;
 TLibFormFree = procedure; stdcall;

var HLib: THandle;

procedure TMainF.WMUser(var Msg: TMessage);
var LF: TLibFormFree;
begin
 if HLib > HInstance_Error then begin
   LF := GetProcAddress(HLib, 'LibFormFree');
   if Assigned(LF) then LF;
   FreeLibrary(HLib);
 end;
end;

procedure TMainF.SpeedButton1Click(Sender: TObject);
var LS: TLibFormShow;
begin
 if HLib <= HInstance_Error then
   HLib := LoadLibrary('MyLib.dll');
 if HlLib > HInstance_Error then begin
   LS := GetProcAddress(HLib, 'LibFormShow');
   if Assigned(LS) then LS(Application.Handle, Self.Handle);
 end;
end;


MetalFan   (2006-10-23 12:22:00) [61]

а откуда посылается это сообщение?!


DmiSb   (2006-10-23 11:58:00) [62]

Закрытие окна производится бы пользователем,
а ошибка возникает на сктроке FreeLibrary(HLib);
в procedure TMainF.WMUser(var Msg: TMessage);


Сергей М.   (2006-10-23 11:52:00) [63]

Закрытие выполняется юзером илии программно ?
На какой строчке возникает AV ?


DmiSb   (2006-10-23 11:49:00) [64]

FreeAndNil(LibF) не помогает, при закрытии формы AV


Сергей М.   (2006-10-23 11:40:00) [65]

для начала:

procedure LibFormFree; stdcall;
begin
  FreeAndNil(LibF);
end;


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

Наверх

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