![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите написать функцию создания класса! [D7, WinXP]
Мастер Ломастер © (2005-12-25 14:35:00)Здравствуйте, уважаемые Мастера!
Поздравляю всех с наступающим Новым годом!
Помогите, пожалуйста, написать функцию следующего вида:
function LoadPlugin(PluginName: PChar): TClass;
Суть такова: Хочу реализовать плагины, у меня есть базовый класс TPlugin, но в DLL можно создать наследник этого класса и переопределить базовые процедуры и функции. Т.е. заранее имя класса наследника я не знаю.
Например:
TInputSignal = class (TPlugin)
или
TOutputSignal = class (TPlugin)
Каким образом можно создать класс, задав его имя как параметр функции.
Заранее спасибо!
Deka (2005-12-26 11:34:00) [1]Сделать как в [7] и возможно у TPlugin еще понадобится конструктор сделать виртуальным.
evvcom (2005-12-26 10:00:00) [2]
> ('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.
alex_*** (2005-12-25 21:03:00) [3]TMetaClass ?
Fay (2005-12-25 15:25:00) [4]2 Мастер Ломастер (25.12.05 15:16) [4]
Тяк.
> Т.е. необходимо вызвать функцию из DLL, которая вернет экземпляр класса.
С этого места нужно подробнее.
Покажи код этой функции.
З.Ы.
Мне всё ещё не понятно, какая разница, какой именно наследник вернётся? Какой реализован, тот и бери себе. У них ведь одинаковый интерфейс, да?
Мастер Ломастер (2005-12-25 15:16:00) [5]Нонятное дело что его надо создавать как
('ClassName' as TPlugin).Cretate
Но как мне задать этот ClassName?
Fay (2005-12-25 15:02:00) [6]2 Мастер Ломастер (25.12.05 14:58) [2]
> заранее имя класса (наследника) я не знаю.
Зачем? Его зовут TPlugin. Только не забудь, что is не сработает (вдруг захочется проверить), т.к. в exe свои классы, в dll свои, пусть даже и объявленные в одном и том же модуле.
Мастер Ломастер (2005-12-25 14:58:00) [7]Согласен, наверное надо подробнее описать:
1. Существует базовый класс TPlugin;
2. В DLL объявляем наследник этого класс, например:
TInputSignal = class (TPlugin);
3. Необходимо создать из программы класс, который объявлен а DLL;
4. Т.е. необходимо вызвать функцию из DLL, которая вернет экземпляр класса.
5. Но фишка в том, что заранее имя класса (наследника) я не знаю.
Fay (2005-12-25 14:51:00) [8]Я м.б. чего-то не понял, но мне кажется, что
>> TInputSignal = class (TPlugin)
- это до компиляции, а
> заранее имя класса наследника я не знаю
- скорее всего после.
Нельзя ли подробнее (лучше в лицах и с [псевдо]кодом) описать суть вопроса?