Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2008, 17:35   #1
Senator
Новичок
Джуниор
 
Регистрация: 23.02.2008
Сообщений: 2
По умолчанию Очистка памяти

Подскажите как сделать очистку памяти. После закрытия формы зауженной из dll, выгружалась сама dll из оперативной памяти.

Код гл.модуля программы

Код:
type
// MyConn: TIDatabase - переменная которая передает подключение
// к dll
TUser = procedure(MyConn: TIDatabase);stdcall;

var
UserDll: THandle;
LoadUser: TUser;
begin
if FileExists('User.dll') then
  begin 
    UserDll:= LoadLibrary('User.dll');
     begin
      try
       @LoadUser:= GetProcAddress(UserDll,'ShowUser');
//IBDatabase1 - подключение к бд типа Firebird   
       LoadUser(IBDatabase1);
     except
   FreeLibrary(UserDll);
         end;
     end;
  end;
end;

Код в dll вызова формы из dll

Код:
procedure ShowUser(MyConn: TIDatabase); stdcall;
begin
UsersF:=TUsersF.Create(application);
UsersF.ibUser.Database:=MyConn
UsersF.IBDatabaseInfo1.Database:=MyConn;
UsersF.ibUser.Open;
UsersF.Label2.Caption:=UsersF.IBDatabaseInfo1.Vers ion;
UsersF.ShowModal;
UsersF.Free;
end;

exports
ShowUser;
Senator вне форума Ответить с цитированием
Старый 28.06.2008, 19:39   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

freeLibrary у Вас вызывается только в случае ошибки, а нужно в любом случае. Остальное правильно, т.к. используется ShowModal:

Код:
var UserDll: THandle;
    LoadUser: TUser;
begin
   if FileExists('dll.dll') then begin
      UserDll := 0;
      try
         try
            UserDll:= LoadLibrary('UserDll.dll');
            @LoadUser:= GetProcAddress(UserDll,'ShowUser');
            if @LoadUser <> nil
            then LoadUser(IBDatabase1);   
            else ShowMessage('can''t fint method ShowUser');
         except
            on E:Exception do ShowMessage(E.Message);
         end;
      finally
         FreeLibrary(UserDll);
      end;
   end;
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очистка экрана Артэс Общие вопросы C/C++ 17 07.04.2016 15:05
Очистка MEMO SG13 Общие вопросы Delphi 5 23.07.2008 21:56
Очистка TImage TaTT DoGG Компоненты Delphi 2 14.05.2008 20:57
Очистка памяти в C# darkstarx Общие вопросы .NET 1 14.04.2008 14:48
Очистка dbf. Ferro БД в Delphi 8 12.11.2007 17:27