Доброе время суток!!!
Есть задача: поместить форму (диалог) в dll файл. При закрытии этой формы (не сразу, иногда через какое-то время) происходит ошибка доступа в память:
Мой dll файл выглядит следующим образом:
Код:
var
DllApp : TApplication;
function ShowAboutForm(MainApp : TApplication; xPos,yPos:Integer; vrs:PChar):Boolean; stdcall;
begin
try
if not Assigned(DllApp) then
begin
DllApp := Application;
Application := MainApp;
end;
AboutDlgForm:=TAboutDlgForm.Create(Application.MainForm);
//Выполняются всякие операции с формой и компонентами на ней
AboutDlgForm.Left:=xPos;
AboutDlgForm.Top:=yPos;
AboutDlgForm.Label4.Caption:=vrs;
//показ модальной формы
AboutDlgForm.ShowModal;
if AboutDlgForm.ModalResult= 1 then
Result:=True
finally
if Assigned(DllApp) then
Application := DllApp;
AboutDlgForm.Free; //Вот тут скорее всего ошибка?!
end;
end;
exports
ShowAboutForm;
И соответственно в моей программе организована динамическая загрузка dll:
Код:
TShowAboutForm = function(MainApp:TApplication; xPos,yPos:Integer; vrs:PChar):Boolean; stdcall;
procedure TForm1.N27Click(Sender: TObject);
var
H:Cardinal;
ShowAboutForm:TShowAboutForm;
xPos,yPos:Integer;
begin
//Определение положение AboutForm
xPos:= Form1.Left+((Form1.Width - 449) Div 2);
yPos:= Form1.Top+((Form1.height - 484) Div 2);
{Загрузка библиотеки}
H:=LoadLibrary('nms_rss.dll');
{Получение адреса функции вывода формы}
@ShowAboutForm:=GetProcAddress(H,'ShowAboutForm');
{Вызов функции и получение ее результата}
ShowAboutForm(Application, xPos,yPos,PChar('Какой-то текст'));
{Выгрузим библиотеку}
FreeLibrary(H);
end;
ПОМОГИТЕ ИЗБАВИТЬCЯ ОТ ЭТОЙ ОШИБКИ!!!!