Показать сообщение отдельно
  #1  
Старый 06.11.2009, 14:48
s0manmbula s0manmbula вне форума
Прохожий
 
Регистрация: 06.11.2009
Сообщения: 16
Репутация: 10
По умолчанию Помещение формы в DLL

Доброе время суток!!!

Есть задача: поместить форму (диалог) в 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Я ОТ ЭТОЙ ОШИБКИ!!!!
Ответить с цитированием