есть массив записей, в котором хранится хэндл и название загруженного модуля:
Код:
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" - в чём может быть дело????