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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 05:27   #1
evgeso
Новичок
Джуниор
 
Регистрация: 12.11.2009
Сообщений: 1
По умолчанию После выгрузки библиотеки Access Violation

Доброго времени суток
Для начала приведу исходный код потом буду задавать вопрос
Код:
TPluginManager = class(TInterfaceList,IPluginManager);
... 
function TPluginManager.LoadLib(const FileName:String;var Handle:THandle)    : boolean;
  var
    LibHandle:THandle;
begin
  LibHandle := LoadLibrary(PChar(FileName));

  if LibHandle = 0 then Result:=False
  else
    Result:=RegLib(LibHandle,FileName);
  Debug('[TPluginManager.RegLib] Библиотека ['+FileName+'] загружена');
end;
RegLib добавляет интерфейс в список и заполняет ещё пару свойств интерфейсов.
Для теста корректности написал функцию выгрузки, которая по нажатию на кнопку должна была выгружать библиотеки(Интерфейсы библиотек ни кем не используются.)
Выгружаю приблизительно так :
Код:
procedure TPluginManager.UnloadAllLibs;
var
  Index:Integer;
  HWD:THandle;
begin
  Debug('[TPluginManager.UnloadAllLibs] Выгружаем библиотеки');
  HWD:=ISimplePlugin(Items[0]).GetHandle;
  Delete(0);
    if FreeLibrary(HWD) then     ShowMessage('Вігрузили')
    else     ShowMessage('Ошибка');
end;
Нулевой элемент существует, проверено.
Элемент ноль подставлен для тестирования а вообще выгрузка идет в цикле.
Запускаю выгрузку с формы на нажатию кнопки:
Код:
procedure TMainAppForm.Button2Click(Sender: TObject);
var
  V:IPluginManager;
begin
  ShowMessage('=====');
  V:=FEngine.GetPluginManger; // Возвращает IPluginManager(TPluginManager)
  V.UnloadAllLibs;
ShowMessage('----');
end;

В результате После нажатия кнопки я получаю (после всех ShowMessage и записей в журнал) Access Violation. Delphi указывает на строку выделенную жирным шрифтом в последнем листинге.
При том что функция UnloadAllLibs полностью выполняется (проверено дебаг сообщениями стоящими после begin и перед end);
Такое впечатление что когда делается FreeLibrary(HWD) приложение не знает адрес возврата из функции
Вообщем вопрос прост, что за хрен или как ровнять руки(код) ?

Последний раз редактировалось evgeso; 13.02.2011 в 14:24.
evgeso вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access violation at address UnChanter Общие вопросы Delphi 22 07.02.2011 11:00
сlass и Access violation profor Общие вопросы C/C++ 2 05.04.2010 15:21
Проблема выгрузки большого списка в Access Zaps БД в Delphi 1 25.02.2009 13:47
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 16:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55