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

Вниз

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

 
Мастер Ломастер   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 2.447 c
2-1136967239
Dmitrij_K
2006-01-11 11:13
2006.01.29
RichEdit. Непонимаю


2-1136891951
Foxtrot
2006-01-10 14:19
2006.01.29
Запись в порт при помощи API (стандартных средств)


4-1132324773
Arazel
2005-11-18 17:39
2006.01.29
Hook Shell_TrayWnd, Помогите не в службу, а в дружбу.


15-1136902601
JazY
2006-01-10 17:16
2006.01.29
Программа идет только на компьюторе, где установлен Делфи


2-1137396453
Silver__Dragon
2006-01-16 10:27
2006.01.29
Помощь при работе со съемными носителями.....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский