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

Вниз

Как перебрать все классы, присутвующие в пакете (Run-Time)   Найти похожие ветки 

 
Priest ©   (2006-12-26 16:42) [0]

Загружаю пакет через LoadPackage. А как найти дальше?


 
ors_archangel ©   (2006-12-26 22:10) [1]

Не проверял, но судя по

procedure RegisterComponents(const Page: string;
 const ComponentClasses: array of TComponentClass);
begin
 if Assigned(RegisterComponentsProc) then
   RegisterComponentsProc(Page, ComponentClasses)
 else
   raise EComponentError.CreateRes(@SRegisterError);
end;

можно установить свой RegisterComponentsProc (в приложении он обычно равен nil), а затем вызвать Register для всех юнитов (он экспортируется) пакета bpl.


 
Юрий Зотов ©   (2006-12-26 22:48) [2]

1. Класс не обязан быть компонентским.
2. Даже компонентский класс не обязан входить в Register.


 
Юрий Зотов ©   (2006-12-26 22:50) [3]

Вдогонку. Насколько я в курсе, легального решения этой задачи нет. Встречал полухакерское и не факт, что оно годится для всех версий.


 
ors_archangel ©   (2006-12-27 02:10) [4]

Юрий Зотов правильно заметил, что [1] может сработать только для зарегестрированных наследников TComponent.
Есть кривой способ для наследников TPersistent:
делаем пустой проект, грузим в него нужный пакет, вызываем GetClass для всех подстрок пакета длиной от 1 до 32 символов (возможная длина идентификатора в Делфи), которые содержат символы _, a..z или A..Z: где GetClass <> nil - класс существует, но он также найдёт классы самого приложения, из которого запускается, т.к. поиск - глобальный, поэтому желательно сделать пустой проект и как-то это учесть…


 
Priest ©   (2006-12-27 10:12) [5]

Я счас пробую по другому. Создал свой базовый класс. Все производные от него регистрирую с помощью RegisterClass(). Затем с помощью класса TClassFinder прохожу по всем зарегистрированным классам


 
Юрий Зотов ©   (2006-12-27 12:12) [6]

> Priest ©   (27.12.06 10:12) [5]

Дык... если пакет свой, то какие же проблемы? Он же про себя сам все знает и может выдать наружу, даже и без регистрации классов.

Например, пакет может содержать процедуру EnumPackageClasses. Вызывая ее и передавая в нее callback, центральное приложение получает нужную информацию. Другой вариант - пакет строит список своих классов и выдает ссылку на него.

И т.д., и т.п.


 
Priest ©   (2006-12-27 12:17) [7]

Так и сделал :) Просто бумал может есть более обобщённый механизм получения информации о пакете



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

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

Наверх




Память: 0.46 MB
Время: 0.042 c
9-1143814787
Pa5ha
2006-03-31 18:19
2007.02.18
Загрузчик текстур


15-1169771252
IMHO
2007-01-26 03:27
2007.02.18
Как создавать файлы Дежавю


6-1158149691
KyRo
2006-09-13 16:14
2007.02.18
Есть ли соединение по сети ?


3-1162115979
аматор
2006-10-29 12:59
2007.02.18
free база


8-1145444606
hosco
2006-04-19 15:03
2007.02.18
Информация о видео-файле





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