Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с языковой конструкцией


>|< ©   (2011-01-25 12:25:00) 

type
 TLoadPluginProc = function: TFormClass;

var
 Module: HMODULE;
 LoadPlugin: TLoadPluginProc;
begin
 try
   Module := LoadPackage(
     Format(FmtModule, [ExtractFilePath(Application.ExeName), PluginName]));
   try
     LoadPlugin := nil;
     @LoadPlugin := GetProcAddress(Module, LoadPluginProcName);
     if Assigned(LoadPlugin) then
      if  LoadPlugin is TPluginForm then//<- тут ошибка
        TPluginForm(LoadPlugin).CreatePlugin(Module, Param)
      else
        LoadPlugin;//возможно вызывается второй раз  
   except
     UnloadPackage(Module);
     raise;
   end;
 except
   on E: EAbort do
     raise;
 end
end


&gt;|&lt;   (2011-01-25 13:22:00) [1]


>  где определен TPluginForm?

в этом же модуле


Slym   (2011-01-25 12:58:00) [2]

Slym ©   (25.01.11 12:56) [4]
TPluginForm

предыдущим постом мог ошибиться... где определен TPluginForm?


Slym   (2011-01-25 12:56:00) [3]

>|   (25.01.11 12:25)
if  LoadPlugin is TPluginForm then //<- тут ошибка


type TLoadPluginProc = function: TFormClass;
описан в 2х местах в приложении и в пакете, и для программы это 2 разных неравных объявления!
для равенства нужно определить тип один раз. обычно это делается в отдельном, статично загружаемом пакете, остальные пакеты uses этот пакет и знают обо всех его определениях


Юрий Зотов   (2011-01-25 12:55:00) [4]

> LoadPluginResult: TFormClass;
Вопрос снят.


Юрий Зотов   (2011-01-25 12:38:00) [5]


>  if  LoadPluginResult.InheritsFrom(TPluginForm) then...

А почему не
if  LoadPluginResult is TPluginForm then...
?


&gt;|&lt;   (2011-01-25 12:30:00) [6]

уже разобрался
var
 Module: HMODULE;
 LoadPlugin: TLoadPluginProc;
 LoadPluginResult: TFormClass;
begin
 if Pos(ExtModule, PluginName) = 0 then
 try
   Module := LoadPackage(
     Format(FmtModule, [ExtractFilePath(Application.ExeName), PluginName]));
   try
     LoadPlugin := nil;
     @LoadPlugin := GetProcAddress(Module, LoadPluginProcName);
     if Assigned(LoadPlugin) then
      LoadPluginResult := LoadPlugin;
      if  LoadPluginResult.InheritsFrom(TPluginForm) then
        TPluginForm(LoadPluginResult).CreatePlugin(Module, Param)
   except
     UnloadPackage(Module);
     raise;
   end;
 except
   on E: EAbort do
     raise;
 end


Наверх

Титульная страница Поиск, карта сайта Написать письмо