![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с языковой конструкцией
>|< © (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
>|< (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...
?
>|< (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