Форум: "Основная";
Текущий архив: 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.042 c