![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запутался с показом немодальной формы из DLL
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;