Показать сообщение отдельно
  #1  
Старый 24.01.2013, 22:28
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию LoadPackage.. UnloadPackage не срабатывает

есть массив записей, в котором хранится хэндл и название загруженного модуля:
Код:
type
  PluginIdName = record
    PluginId: HMODULE;
    PluginName: string;
  end;

var
  PluginsIdsNames: array of PluginIdName;

Далее в загружаю модуль и записываю в массив его хэндл и название:
(PlName - входное значение - имя модуля)
Код:
  //Пробуем загрузить плагин в память
  try
    Plugin := LoadPackage(LocalPluginPath);
ShowMessage('Загружаем '+PlName+'='+inttostr(Plugin));
    SetLength(PluginsIdsNames,Length(PluginsIdsNames)+1);
    PluginsIdsNames[Length(PluginsIdsNames)-1].PluginId:=Plugin;
    PluginsIdsNames[Length(PluginsIdsNames)-1].PluginName:=PlName;

Функция получения ид модуля из массива по его названию:
Код:
function GetHMODULE(PluginName: string): HMODULE;
var
  i: Integer;
begin
  Result:=0;
  for i := 0 to (Length(PluginsIdsNames) - 1) do
  begin
    if PluginsIdsNames[i].PluginName = PluginName then
    begin
      Result := PluginsIdsNames[i].PluginId;
      Break;
    end;
  end;
  ShowMessage(IntToStr(Result));
end;

Теперь пробую выгрузить модуль
Код:
    ShowMessage('Пробуем выгрузить '+AllowedToLoadPluginNames[i]);
    UnloadPackage(GetHMODULE(AllowedToLoadPluginNames[i]));

при загрузке и выгрузке msgbox выводит IntToStr(HMODULE) идентификатор. Записываю на листочек - они одинаковые! Но UnloadPackage вылетает с ошибкой "Invalid Package handle" - в чём может быть дело????
Ответить с цитированием