![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток ...
Из главного модуля программы происходит динамическая загрузка DLL. В DLL вносятся данные, в том числе и с помощью OpenDialog, которые потом сохраняются в базу Interbase. После сохранения данных в базе предусмотрена выгрузка DLL. Код программы: Код:
unit Unit2; interface uses Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, DBGrids, StdCtrls, Grids, DBCtrls, DB, Mask; type TShowFormins=procedure(handle: Thandle); stdcall; .... procedure TForm2.N4Click(Sender: TObject); var dllins:thandle; ShowFormins:TShowFormins; begin dllins:=LoadLibrary('ins.dll'); @ShowFormins:=GetProcAddress(dllins, 'ShowFormins'); ShowFormins(handle); freelibrary(dllins); end; Код DLL Код:
unit insUnit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, Mask, DB, IBCustomDataSet, IBDatabase, IBTable, Grids, DBGrids; type TForm1 = class(TForm) ...... private { Private declarations } public { Public declarations } end; var Form1: TForm1; procedure ShowFormins(handle: Thandle); export; stdcall; implementation {$R *.dfm} procedure ShowFormins(handle: Thandle); begin application.handle:=handle; form1:=tform1.create(application); form1.ShowModal; form1.Free; end; procedure TForm1.FormShow(Sender: TObject); begin form1.IBTable1.Insert; form1.Button1.SetFocus; form1.dbmemo1.Clear; form1.DBEdit1.Clear; form1.DBEdit2.Clear; form1.DBEdit3.Clear; form1.DBEdit4.Clear; form1.DBEdit5.Clear; end; procedure TForm1.Button1Click(Sender: TObject); begin with OpenDialog1, dbMemo1 do if Execute then Lines.LoadFromFile(FileName); end; procedure TForm1.Button2Click(Sender: TObject); begin if IBTable1.Modified then DataSource1.DataSet.FieldByName('t_data').AsString:=formatdatetime('dd.mm.yyyy',now()); IBTable1.Post; form1.dbmemo1.Clear; form1.DBEdit1.Clear; form1.DBEdit2.Clear; form1.DBEdit3.Clear; form1.DBEdit4.Clear; form1.DBEdit5.Clear; Form1.Close; end; procedure TForm1.Button3Click(Sender: TObject); begin form1.IBTable1.Cancel; form1.Close; end; end. При использовании OpenDialog DLL не выгружается и при повторной загрузке (без выхода из программы) выдает ошибку "I/O error for file 'имя базы'". Выручайте, не могу найти где ошибка.... Спасибо. |