begin
ReadSignature;
Result := nil;
GlobalNameSpace.BeginWrite; // Loading from stream adds to name space
try
try
ReadPrefix(Flags, I);
if Root = nil then
begin
Result := TComponentClass(FindClass(ReadStr)).Create(nil);
Result.Name := ReadStr;
end else
Как создать обьект класса, зная только имя класса.
У меня все классы, которые могут быть переданы зарегистрированы
RegisterClass'oм. Я знаю есть метод, FindClass он чтоли называется, позволяющий получиться по имени класса Указатель на TMetaClass, соответсвующий этому классу.
И вот сам вопрос: Как имея только TMetaClass создать экземпляр нужного класса?
В Дельфи всё просто "ObjectRef := TSomeMetaClass.Create(параметры);". А как строителю быть?
Да также, для всей VCL-овской ботвы всё то же самое.
Цитата:
Originally posted by fellow
Да также, для всей VCL-овской ботвы всё то же самое.
Да также, для всей VCL-овской ботвы всё то же самое.
Ты уверен? А можешь код привести? Я почему то так и не смог найти аналог. Или у меня сегодня лыжи не едут :(
Цитата:
Originally posted by Photus
Ты уверен? А можешь код привести? Я почему то так и не смог найти аналог. Или у меня сегодня лыжи не едут :(
Ты уверен? А можешь код привести? Я почему то так и не смог найти аналог. Или у меня сегодня лыжи не едут :(
Не, код не могу привести, сегодня я уже "устал". А в справке посмотрите насчёт FindClass и TMetaClass.
Цитата:
Originally posted by fellow
Не, код не могу привести, сегодня я уже "устал". А в справке посмотрите насчёт FindClass и TMetaClass.
Не, код не могу привести, сегодня я уже "устал". А в справке посмотрите насчёт FindClass и TMetaClass.
Да раз 10 уже сёдня смотрел... :(((
Не получается на С, напишите на паскале и подключите этот паскалевский файл к проекту.
Ладно. Сам как-нибудь пороюсь в VCL.
Ну, борланд не эталон корректных решений. VCL сугубо паскальное порождение, такое на С не переведёшь. Кстати, в исходниках VCL, идущих в комплекте с билдером, даже намёка на MetaClass нет, хоть он в хелпе и присутствует. А в модуле classes.pas в функции TReader.ReadRootComponent есть такие строки:
Цитата:
Originally posted by fellow
Ну, борланд не эталон корректных решений. VCL сугубо паскальное порождение, такое на С не переведёшь.
Ну, борланд не эталон корректных решений. VCL сугубо паскальное порождение, такое на С не переведёшь.
C этим не спорю.
Цитата:
Не получается на С, напишите на паскале и подключите этот паскалевский файл к проекту.
:) Так и сделал.
fellow, thx.
Цитата:
Originally posted by Photus
fellow, thx.
fellow, thx.
велкам, Photus.
Кстати, TMetaClass нашёлся в заголовочном файле systobj.h
Цитата:
Originally posted by fellow
Кстати, TMetaClass нашёлся в заголовочном файле systobj.h
Кстати, TMetaClass нашёлся в заголовочном файле systobj.h
:) А чё его искать то? Нажал Правой на слове TMetaClass и Find Declaration :) Вот только метода Create я там не нашёл :)