Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Помогите написать функцию создания класса!   Найти похожие ветки 

 
Мастер Ломастер   (2005-12-25 14:35) [0]

Здравствуйте, уважаемые Мастера!
Поздравляю всех с наступающим Новым годом!

Помогите, пожалуйста, написать функцию следующего вида:

function LoadPlugin(PluginName: PChar): TClass;


Суть такова: Хочу реализовать плагины, у меня есть базовый класс TPlugin, но в DLL можно создать наследник этого класса и переопределить базовые процедуры и функции. Т.е. заранее имя класса наследника я не знаю.

Например:
TInputSignal = class (TPlugin)
или
TOutputSignal = class (TPlugin)

Каким образом можно создать класс, задав его имя как параметр функции.

Заранее спасибо!


 
Fay ©   (2005-12-25 14:51) [1]

Я м.б. чего-то не понял, но мне кажется, что
>> TInputSignal = class (TPlugin)
- это до компиляции, а
> заранее имя класса наследника я не знаю
- скорее всего после.
Нельзя ли подробнее (лучше в лицах и с [псевдо]кодом) описать суть вопроса?


 
Мастер Ломастер   (2005-12-25 14:58) [2]

Согласен, наверное надо подробнее описать:
1. Существует базовый класс TPlugin;
2. В DLL объявляем наследник этого класс, например:
TInputSignal = class (TPlugin);
3. Необходимо создать из программы класс, который объявлен а DLL;
4. Т.е. необходимо вызвать функцию из DLL, которая вернет экземпляр класса.
5. Но фишка в том, что заранее имя класса (наследника) я не знаю.


 
Fay ©   (2005-12-25 15:02) [3]

2 Мастер Ломастер   (25.12.05 14:58) [2]
> заранее имя класса (наследника) я не знаю.
Зачем? Его зовут TPlugin. Только не забудь, что is не сработает (вдруг захочется проверить), т.к. в exe свои классы, в dll свои, пусть даже и объявленные в одном и том же модуле.


 
Мастер Ломастер   (2005-12-25 15:16) [4]

Нонятное дело что его надо создавать как
("ClassName" as TPlugin).Cretate

Но как мне задать этот ClassName?


 
Fay ©   (2005-12-25 15:25) [5]

2 Мастер Ломастер   (25.12.05 15:16) [4]
Тяк.
> Т.е. необходимо вызвать функцию из DLL, которая вернет экземпляр класса.
С этого места нужно подробнее.
Покажи код этой функции.

З.Ы.
Мне всё ещё не понятно, какая разница, какой именно наследник вернётся? Какой реализован, тот и бери себе. У них ведь одинаковый интерфейс, да?


 
alex_*** ©   (2005-12-25 21:03) [6]

TMetaClass ?


 
evvcom ©   (2005-12-26 10:00) [7]


> ("ClassName" as TPlugin).

Не "ClassName", а
type
 TPluginClass = class of TPlugin;
var
 MyClassVar: TPluginClass;
 MyVar: TPlugin;
begin
 MyClassVar := GetPluginClass; // функция из dll
 MyVar := MyClassVar.Create;

Только мой тебе совет. Используй run-time packages, иначе багов не оберешься. Все равно твою dll смогут использовать только проги, написанные в той же версии Delphi, что и сама dll.


 
Deka ©   (2005-12-26 11:34) [8]

Сделать как в [7] и возможно у TPlugin еще понадобится конструктор сделать виртуальным.



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

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
15-1136939588
НТВ
2006-01-11 03:33
2006.01.29
Где можно найти старые статьи 70-80 годов?


2-1136805696
LionMen
2006-01-09 14:21
2006.01.29
Ошибка: OLE error 800A03EC


4-1132302505
lsw
2005-11-18 11:28
2006.01.29
Работа с dll


4-1132033313
френк
2005-11-15 08:41
2006.01.29
Сложность с передачей сообщения


6-1129727738
Sergey840
2005-10-19 17:15
2006.01.29
IdHTTP (Загрузка страницы с 404 ошибкой)