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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 14:52   #1
medved6216
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 56
По умолчанию Выгрузка dll памяти

Проблема вот в чем при закрытие программы вылетает ошибка: "память не может быть прочитана".
Саму форму гружу из dll
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
h:=LoadLibrary('baseform.dll');
showForm;
end;
и выгружаю при закрытие
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(h);
end;
в той форме использую процедуру из другой dll
Код:
var
  procedure ConnectionBase(var ClientData:TClientDataSet; path:string);
            external 'baseoperation.dll';

procedure TForm1.Loading;
begin
BaseOperation := LoadLibrary('baseoperation.dll');
connectionbase(ClientData, Path);
end;
так как я планирую ещё использовать эту библиотеку, то выгружаю её только при закрытии формы
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(BaseOperation);
end;
Форма закрывается нормально. Но когда закрываешь основное приложение, то вылетает эта ошибка. Сама процедура срабатывает. Может я где ошибся?
medved6216 вне форума Ответить с цитированием
Старый 07.11.2011, 15:33   #2
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

кажется, у вас одновременно библиотека грузится и статически, и динамически.

если вы хотели объявить переменную на процедурном типе (смотрю, что процедура под разделом var), то надо это было делать так:

Код:
var
  ConnectionBase: procedure(var ClientData: TClientDataSet; path: String);
а адрес процедуры получать функцией GetProcAddress.

или же отказаться от динамической загрузки (полность убрать Load/FreeLibrary) и оставить

Код:
procedure ConnectionBase(var ClientData: TClientDataSet; path: String); external 'baseoperation.dll';
Хамяг вне форума Ответить с цитированием
Старый 07.11.2011, 16:12   #3
medved6216
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 56
По умолчанию

Не помогло
medved6216 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка DLL и ее выгрузка Den7656 Помощь студентам 2 17.09.2011 14:34
Определить SIZEMEM у DLL(Размер dll в памяти процесса) Человек_Борща Общие вопросы Delphi 6 22.07.2011 20:54
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
загрузка и выгрузка памяти на языке СИ Anil Общие вопросы C/C++ 5 19.12.2007 18:25