Главная страница
    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
Время: 0.037 c
2-1136976284
Новичек
2006-01-11 13:44
2006.01.29
Наименьшее значение Handle.


2-1137115183
remark
2006-01-13 04:19
2006.01.29
Непонятки форматирования


4-1132037793
rusgl
2005-11-15 09:56
2006.01.29
Можно ли как-нить установить HOOK на реестр?


15-1136384621
iamdanil
2006-01-04 17:23
2006.01.29
красивые компоненты


15-1136572004
Yerlan Dossanov
2006-01-06 21:26
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский