Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

Интерфейс программы храниться в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
3-1123076033
redlord
2005-08-03 17:33
2005.09.25
как записать кавычку в строчное поле таблици через SQL запрос


2-1124027784
Андрей Молчанов
2005-08-14 17:56
2005.09.25
FreeAndNil(Form1) и Form1.Free


14-1125154722
psa247
2005-08-27 18:58
2005.09.25
Дыра в ядре 2000


14-1125646228
ocean
2005-09-02 11:30
2005.09.25
Западный человек законопослушен?


1-1125853456
Alpine
2005-09-04 21:04
2005.09.25
Где лучше сохранять список пользователей с паролями ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский