![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерфейс программы храниться в DLL [D7, WinXP]
Николай1 © (2005-08-31 12:28:00)Народ может кто подскажет почему при вызове фомы в приложении
всё 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 15:04:00) [1]Коля, ты там уже договорись со своей программой, какая именно у тебя там ошибка.
А потом спросишь, как её исправить.
Ok?
Николай1 (2005-08-31 14:58:00) [2]Точнее при закрытии программы выдаётся ошибка:
raised too many consecutive exeptions: .................
если функции не вызывать то выход из программы нормальный.
Reindeer Moss Eater (2005-08-31 14:08:00) [3]А как зделать выгрузку подскажи если знаешь а то я себе уже голову сломал
При статическом импорте (а он у тебя такой) об этом не надо вообще беспокоиться.
Brenagwynn (2005-08-31 13:25:00) [4]Да, кстати. А в uses ты не забыл ShareMem включить на первом месте?
IceBeerg (2005-08-31 13:10:00) [5]А FreeLibrary не помогает?
Николай1 (2005-08-31 13:03:00) [6]А как зделать выгрузку подскажи если знаешь а то я себе уже голову сломал
Reindeer Moss Eater (2005-08-31 13:00:00) [7]У тебя статический импорт функции библиотеки.
Значит либу грузит windows.
И пока твой процесссуществует, библиотека будет загружена.
Делать проверку на то, что при закрытии какого-то там окна библиотека выгружена - бессмысленно.
Николай1 (2005-08-31 12:56:00) [8]Инициализацию делаю так
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 12:53:00) [9]И что из этого?
Библиотека должна после этого кода испугаться и выгрузиться сама по себе?
Николай1 (2005-08-31 12:51:00) [10]На закрытие окна роц делает вот этот код
Form_Assort.Free; - убиваем окно
Screen := DLLScr; - Возвращаем TScreen глоб перемен прилож
Application:=DLLApp; - Возвращаем TApplication глоб перемен прилож
Reindeer Moss Eater (2005-08-31 12:45:00) [11]Ну и как связано убийство окна с выгрузкой DLL?
Николай1 (2005-08-31 12:37:00) [12]Нет при закрытии главного окна приложения выдаётся ошибка, что Dll висит в памяти. Хотя его окна уже нет убили, закрыли тобиш.
Reindeer Moss Eater (2005-08-31 12:32:00) [13]хотя на закрытие MDI окна стоит процедура UnloadLibFrmAssort();
Стоит и стоять будет. И что из этого?
Она что-то делает с загруженной библиотекой?