Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2013, 00:12
govorun govorun вне форума
Новичок
 
Регистрация: 30.10.2013
Сообщения: 60
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Ошибка при выгрузке DLL

Доброго времени суток ...
Из главного модуля программы происходит динамическая загрузка 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 (с его помощью загружаеися файл в dbmemo и потом в поле BLOB базы данных) то все работает красиво и DLL выгружается из памяти (естественно без загрузки файла в базу).
При использовании OpenDialog DLL не выгружается и при повторной загрузке (без выхода из программы) выдает ошибку "I/O error for file 'имя базы'".
Выручайте, не могу найти где ошибка.... Спасибо.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025