Показать сообщение отдельно
  #4  
Старый 13.02.2011, 18:56
evgeso evgeso вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 6
Репутация: 10
По умолчанию

Код:
function TPluginManager.GetPluginInterface(Handle: THandle): ISimplePlugin;
var
    Func:function : TInterfacedObject;
    Obj:TObject;
    Info:ISimplePlugin;
begin
  DebugLog('[TPluginManager.GetPluginInterface] Поиск функции GetPluginInf');
  @Func:=GetProcAddress(Handle,'GetPluginInf');
  if @Func<>nil then
     begin
      Obj:=Func;
      DebugLog('[TPluginManager.GetPluginInterface] Функция GetPluginInf нацдена');
      if not TInterfacedObject(Obj).GetInterface(ISimplePlugin,Result) then
        begin
          DebugLog('[TPluginManager.GetPluginInterface] Результат не вернул интерфейс.');
          Result:=nil
        end
       else
          DebugLog('[TPluginManager.GetPluginInterface] Результат вернул интерфейс.');
          @Func := nil;
     end
  else
    begin
      DebugLog('[TPluginManager.GetPluginInterface] Функция GetPluginInf не найдена.');
      Result:=nil;
    end;
end;

function TPluginManager.RegLib(Handle: THandle;
  FileName: WideString): boolean;
var
  LibInterface:ISimplePlugin;
  Index:Integer;
begin
  DebugLog('[TPluginManager.RegLib] Регистрируем библиотеку['+FileName+']');
  LibInterface:=GetPluginInterface(Handle);
   if LibInterface=nil  then
    begin
      Result:=False;
        WarningMsg('[TPluginManager.RegLib] Интерфейс не найден');
      Exit;
    end;
  if VerifyInf(LibInterface) then
     try
      LibInterface.SetHandle(Handle);
      LibInterface.SetPluginFileName(FileName);
      Add(LibInterface);
       DebugLog('[TPluginManager.RegLib] Зарегестрирована');
      Result:=True;
     except
      Result:=False;
     end
end;
Вот. Возможны излишки, но это сделано в результате отладки.
Ответить с цитированием