Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Ошибка Cannot assign a TFont to a TFont    Найти похожие ветки 

 
Pupkov ©   (2004-11-28 23:20) [0]

Есть у меня тут один трабл.
Задумал е на днях одну програмку, работающую с плагинами. Плагин выполнен в виде библиотеки DLL. Для организации интерфейсов общения приложения и плагина спроектировал два класса:
1. TESPluginAppInterface = class
    public
     PluginType:1..3;
     procedure AddControl(AControl:TControl);virtual;stdcall;
   end;
   Для организации интерфейса плагин --> приложение. Его методы реализуются в модуле приложения, а в модуле плагина его методы описываются как абстрактные

 2. TESAppPluginInterface = class
    public
     procedure LoadFromFile(FileName:String;WinCtrl:TWinControl);virtual;stdcall;abstract;
    end;
    Для организации интерфейса приложение --> плагин. Его методы реализуются в модуле плагина, а в модуле приложенгия его методы описываются как абстрактные.

 Ну так вот. Когда приложению требуется открыть какой-либо файл то оно обращается за этим к плагину используя метод LoadFromFile класса TAppPluginInterface, в качестве параметров передаются название файла и некий оконный контрол. Метод реализован внутри плагина вот так:

procedure TESAppPluginInterface.LoadFromFile(FileName:String;
                                          WinCtrl:TWinControl);virtual;stdcall;abstract;
var
Control:TControl
begin
Control:=TControl.Create(WinCtrl);
PluginAppInterface.AddControl(Control);
end;

Тоесть если плагину нужно создать какойлиибо контрол и расположить его в приложении то он создаёт его и и используя метод AddControl класса TPluginAppInterface передаёт его приложению. Этот метод реализован внутри приложения вот так:

procedure TESPluginAppInterface.AddControl(AControl:TControl);virtual;stdcall;
 begin
  Control.Parent:=Panel1;
 end;

Тоесть получая контрол приложение само принемает решение куда запихать его и запихивает (вчастности здесь запивает на Panel1).
Так вот строчка Control.Parent:=Panel1 в рантайме генерирует ошибку:"Cannot assign a TFont to a TFont". После пристального разглядывания под микроскопом выяснилось что ошибку вызывает метод Control.InsertControl. Весь вечер бился с выявлением причины возникновения ошибки но так и не допедрил почему это происходит.


 
jack128 ©   (2004-11-29 00:23) [1]

нужно компилировать приложение и плагины с run time packages.


 
Игорь Шевченко ©   (2004-11-29 01:30) [2]


> Весь вечер бился с выявлением причины возникновения ошибки


В Exe TFont находится по одному адресу, в DLL по другому. Операция IS сравнивает адреса, если не совпадают, значит TFont-ы разные.


 
REA   (2004-11-29 10:10) [3]

Если планируется использовать классы в plugin, то лучше применять packages вместо DLL или COM-технологию. У всех способов впрочем есть свои достоинства и недостатки.


 
Amoeba ©   (2004-11-29 10:51) [4]

На http://www.delphikingdom.com ("Корорлевство Delphi") есть аж целых две серьезных статьи, посвященных созданию и использованию plugin-ов. Очень рекомендую.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.069 c
14-1100546201
Познающий БД
2004-11-15 22:16
2004.12.12
BDE: Какие файлы скопировать?


1-1101664029
Express
2004-11-28 20:47
2004.12.12
Ошибки Delphi


1-1101746383
Df
2004-11-29 19:39
2004.12.12
if, then, else on RichEdit


14-1101297881
Маг Похмеляйнен
2004-11-24 15:04
2004.12.12
Про девчонок и вольтмод


3-1100096254
Andriy Tysh
2004-11-10 17:17
2004.12.12
Как вывести отчёт КвикРепортом из КлиентДатаСета только те записи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский