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

Вниз

Как правильно зарегестрировать класс.   Найти похожие ветки 

 
Matveih1 ©   (2008-05-13 09:24) [0]

Добрый день. Есть основная программа и есть bpl. При загрузке bpl происходит регистрация класса

initialization
begin
 RegisterClass(TForm2);
end;


но основная программа не может найти класс Form2
var
ModuleP: HMODULE;
Intf: IMayIntf;
AClass: TComponentClass;
AObj: TComponent;
begin
ModuleP := LoadPackage("Pack.bpl");
 if ModuleP <> 0 then
 begin
   AClass := TComponentClass(FindClass("TForm2"));
    if Assigned(AClass) then
      AObj := AClass.Create(Self);
  end;


где я промазал?


 
Сергей М. ©   (2008-05-13 09:31) [1]


> где я промазал?


У твоего хост-приложения свой собственный экз-р RTTI, вот здесь ты и промазал.

Обеспечение единого экз-ра RTTI для всех модулей приложения достигается сборкой этих модулей с опцией использования рантайм-пакетов


 
Игорь Шевченко ©   (2008-05-13 09:53) [2]


> При загрузке bpl происходит регистрация класса


Я не совсем помню детали, но с регистрацией классов в инициализации загружаемых пакетов в какое-то время были проблемы. Поэтому проще предусмотреть отдельную, явно вызываемую функцию у пакета, которая будет заниматься регистрацией его классов после загрузки.


 
Ega23 ©   (2008-05-13 10:11) [3]

Кстати. Я любой потомок TPersistent могу зарегистрировать? Точнее, достаточно ли моему классу быть потомком TPersistent, если я его хочу зарегистрировать? Или ещё что-то нужно?


 
Сергей М. ©   (2008-05-13 10:16) [4]


> Ega23 ©


Справка дает однозначный ответ:

The AClass parameter is the class that is descended from TPersistent


 
Slym ©   (2008-05-13 10:18) [5]

Сергей М. ©   (13.05.08 9:31) [1]
собственный экз-р RTTI

причем тут RTTI? то что белее 1 копии ето верно, но копий rtl а не RTTI...
Pack.bpl пользует внешнюю rtl.bpl и в ней регистрируется класс, хост приложение использует прилинкованую rtl и поиск класса происходит в ней... решение скомпилировать хост приложение с пакетами, хватит одного rtl остальные можно выкинуть, но советую добавить и vcl т.к. RegisterClass(TForm2); ...


 
Slym ©   (2008-05-13 10:19) [6]

Ega23 ©   (13.05.08 10:11) [3]
TPersistentClass = class of TPersistent;
procedure RegisterClass(AClass: TPersistentClass);


 
Сергей М. ©   (2008-05-13 10:20) [7]


> Slym ©   (13.05.08 10:18) [5]


Угу. Ты прав, конечно же rtl, а не RTTI.
Думал о Фоме, а написал про Ерему)


 
Matveih1 ©   (2008-05-13 12:30) [8]


> Pack.bpl пользует внешнюю rtl.bpl и в ней регистрируется
> класс, хост приложение использует прилинкованую rtl и поиск
> класса происходит в ней... решение скомпилировать хост приложение
> с пакетами, хватит одного rtl остальные можно выкинуть,
> но советую добавить и vcl т.к. RegisterClass(TForm2);

Помогло! Спасибо



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

Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.047 c
15-1208518662
man
2008-04-18 15:37
2008.06.01
Motorola C350


2-1210623798
AlexDan
2008-05-13 00:23
2008.06.01
Максимальная величина файла


4-1189662839
Rustam
2007-09-13 09:53
2008.06.01
Вопрос по оборудованию


3-1198595059
Vlad Oshin
2007-12-25 18:04
2008.06.01
Подскажите с запросом sql


15-1208641026
Германн
2008-04-20 01:37
2008.06.01
А что твориться на Королевстве?





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