Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

Интерфейс программы храниться в DLL   Найти похожие ветки 

 
Николай1   (2005-08-31 12:28) [0]

Народ может кто подскажет почему при вызове фомы в приложении
всё Ok, но при закрытии программы вадаётся ошибка, типа что Dll
досихпор инициализированна хотя на закрытие MDI окна стоит процедура UnloadLibFrmAssort();
код ниже.

unit Sp_Assortimenta;

interface

uses
.................
type
 TForm_Assort = class(TForm)
.................
 private
   procedure UnloadLibFrmAssort();
 public

 end;

function  InitLibFrmAssort(App,Scr: Integer;Sowing:Boolean;Connect:string): Boolean; register; exports InitLibFrmAssort;

var
 Form_Assort: TForm_Assort;
 DLLApp: TApplication;
 DLLScr: TScreen;
 ConnectionString:String;
implementation

uses Add_Edit_Assort;

{$R *.dfm}

function InitLibFrmAssort(App,Scr: Integer;Sowing:Boolean;Connect:string): Boolean;
begin
if not Sowing then
 begin
  ConnectionString:=Connect;
  ShowMessage(ConnectionString);
  DLLScr := Screen;
  Screen := TScreen(Scr);
  DLLApp:=Application;
  ShowMessage(IntToStr(Integer(DLLApp)));
  Application:=TApplication(App);
  ShowMessage(IntToStr(Integer(Application)));
  Form_Assort:=TForm_Assort.Create(Application);
  Form_Assort.Show;
  Result:=True;
 end
else
 begin
  OpenIcon(Form_Assort.Handle);
  Result:=True;
 end;
end;

Procedure TForm_Assort.UnloadLibFrmAssort();
begin
Form_Assort.Free;
Screen := DLLScr;
Application:=DLLApp;
ShowMessage(IntToStr(Integer(Application)));
end;
.....................
.....................
.....................

procedure TForm_Assort.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
begin
if ADOTable1.State in [dsEdit, dsInsert] then
 if MessageDlg("Возможна потеря редактируемых данных.",mtWarning,mbOKCancel,1)=mrCancel then
  CanClose := False
 else
   ADOTable1.Active:=False
else
 ADOTable1.Active:=False;
end;

procedure TForm_Assort.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
UnloadLibFrmAssort();
end;

end.


 
Reindeer Moss Eater ©   (2005-08-31 12:32) [1]

хотя на закрытие MDI окна стоит процедура UnloadLibFrmAssort();

Стоит и стоять будет. И что из этого?
Она что-то делает с загруженной библиотекой?


 
Николай1   (2005-08-31 12:37) [2]

Нет при закрытии главного окна приложения выдаётся ошибка, что Dll висит в памяти. Хотя его окна уже нет убили, закрыли тобиш.


 
Reindeer Moss Eater ©   (2005-08-31 12:45) [3]

Ну и как связано убийство окна с выгрузкой DLL?


 
Николай1   (2005-08-31 12:51) [4]

На закрытие окна роц делает вот этот код

Form_Assort.Free; - убиваем окно
Screen := DLLScr; - Возвращаем TScreen глоб перемен прилож
Application:=DLLApp; - Возвращаем TApplication глоб перемен прилож


 
Reindeer Moss Eater ©   (2005-08-31 12:53) [5]

И что из этого?
Библиотека должна после этого кода испугаться и выгрузиться сама по себе?


 
Николай1   (2005-08-31 12:56) [6]

Инициализацию делаю так
unit Unit2;
interface
uses
Forms;

const   DllFrmAssort = "Sp_AssortDll.dll";

function  InitLibFrmAssort(App,Scr: Integer;Sowing:Boolean;Connect:string): Boolean; external DllFrmAssort;

и просто вызываю эту функцию.

может я чтото не так деля подскажите если кто знает.


 
Reindeer Moss Eater ©   (2005-08-31 13:00) [7]

У тебя статический импорт функции библиотеки.
Значит либу грузит windows.
И пока твой процесс существует, библиотека будет загружена.
Делать проверку на то, что при закрытии какого-то там окна библиотека выгружена - бессмысленно.


 
Николай1   (2005-08-31 13:03) [8]

А как зделать выгрузку подскажи если знаешь а то я себе уже голову сломал


 
IceBeerg ©   (2005-08-31 13:10) [9]

А FreeLibrary не помогает?


 
Brenagwynn   (2005-08-31 13:25) [10]

Да, кстати. А в uses ты не забыл ShareMem включить на первом месте?


 
Reindeer Moss Eater ©   (2005-08-31 14:08) [11]

А как зделать выгрузку подскажи если знаешь а то я себе уже голову сломал

При статическом импорте (а он у тебя такой) об этом не надо вообще беспокоиться.


 
Николай1   (2005-08-31 14:58) [12]

Точнее при закрытии программы выдаётся ошибка:
raised too many consecutive exeptions: .................
если функции не вызывать то выход из программы нормальный.


 
Reindeer Moss Eater ©   (2005-08-31 15:04) [13]

Коля, ты там уже договорись со своей программой, какая именно  у тебя там ошибка.
А потом спросишь, как её исправить.

Ok?



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.062 c
14-1125226580
ArtemESC
2005-08-28 14:56
2005.09.25
Каталог


1-1125775015
xayam
2005-09-03 23:16
2005.09.25
Многострочная палитра


3-1123664069
Max4
2005-08-10 12:54
2005.09.25
перемещение курсора по DBGrid


14-1124491610
Andy BitOff
2005-08-20 02:46
2005.09.25
Google map, помните?


4-1122975929
webpauk
2005-08-02 13:45
2005.09.25
Иконка