Главная страница
    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
14-1125921688
Floppy
2005-09-05 16:01
2005.09.25
Как добраться?


1-1125571062
dreamse
2005-09-01 14:37
2005.09.25
Вопрос про TreeView


14-1125152413
Гоман
2005-08-27 18:20
2005.09.25
Вопрос про дефективный монитор


14-1125342771
ХорошийЧЕЛ
2005-08-29 23:12
2005.09.25
Создание анимации в Adobe ImageReady


3-1124100158
kreyl
2005-08-15 14:02
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский