|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помещение формы в 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Я ОТ ЭТОЙ ОШИБКИ!!!! Последний раз редактировалось s0manmbula, 06.11.2009 в 14:57. |