Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизДоступ к процедуре регистрации Найти похожие ветки
← →
HydraMarat (2004-03-04 01:04) [0]Здравствуйте, уважаемые Мастера! Нарисовался такой вопросик. Все мы знаем, что с помошью процедуры Register Делфийское IDE регистрирует компоненты. Так вот, собственно: как программно получить доступ к этой процедуре? Handle пакета полим через LoadPackage, а дальше? Вообщем нужно взывать ее принудительно.
Заранее, Спасибо!
← →
Германн © (2004-03-04 02:08) [1]Помммедленеййй пожалуста, я записсссываю... © Шурик. "Кавказская пленница" :))
← →
Mim (2004-03-04 05:37) [2]А зачем?
Наверное можно вызвать InitializePackage которая вызавет все register, но все равно особого смысла я невижу.
Там же происходит регистрация компоент на палитере, а пол-литры у вас как я понимаю нет :).
← →
Юрий Зотов © (2004-03-04 06:39) [3]Во-первых, процедура эта всегда декларируется в секции interface, поэтому ничто не мешает просто вызвать ее точно так же, как вызывается и любая другая процедура (есди надо, добавив при вызове имя модуля).
Во-вторых, вызвать ее можно и через GetProcAddress. Только сначала надо любым просмотрщиком DLL-ек определить истинное имя процедуры в пакете (к Register там будет добавлено имя модуля и еще что-нибудь).
← →
HydraMarat (2004-03-04 23:34) [4]Mim
InitializePackage не вызывает процедуры Register. Это делает IDE при загрузке.
Юрий Зотов
Да, простой GetProcAddress(Pkg, "Register") ничего не дает. Добавляется имя юнита?... Гм... интересно. Обязон попробую!
Всем спасибо! Думаю седня я это "добью".
← →
Юрий Зотов © (2004-03-04 23:50) [5]> HydraMarat (04.03.04 23:34) [4]
Думаю, экспортируемое имя будет выглядеть так:
@Имя_модуля@Register$qqrv
Но этот способ оправдан только когда заранее неизвестно, есть ли такая процедура, или ее нет. Иначе гораздо проще взять - да и вызвать, без заморочек:
Имя_модуля.Register
← →
Petr V. Abramov © (2004-03-05 01:43) [6]Юрий Зотов © (04.03.04 23:50) [5]
Перефразирую по-другому - когда Имя_модуля стоит в uses и, следовательно, пакет прилинкован, хоть и как RunTime, к приложению". Вопрос интересный, поэтому с автора - ответ на вопрос "как же на самом деле будет выглядеть экспортируемое имя".
← →
HydraMarat (2004-03-05 13:10) [7]Да собственно так оно и оказалося! Через GetPackageInfo я получил весь список модулей пакета, и сформировал имя именно по образцу @Имя_модуля@Register$qqrv. GetProcAddress все нашла и все Register"ы вызволись. Не могу понять для чего такие заморочки? Нельща просто ИмяМодуля.Register? А то какие-то qqrv!
← →
HydraMarat (2004-03-05 13:12) [8]ой, скока орфографических ошибок... простите.
← →
Юрий Зотов © (2004-03-05 13:31) [9]> HydraMarat (05.03.04 13:10) [7]
> GetProcAddress все нашла и все Register"ы вызволись
Дык... собственно, и сомнений не было (просто такая задача уже решалась, только подзабыл детали)
:о)
> А то какие-то qqrv!
Надо полагать, что точно об этом знает только Borland. Но если проанализировать подобные постфиксы, то можно предположить, что они означают какую-то систему, описывающую параметры функции. В частности, qqrv означает - "без параметров".
P.S.
Рискну предугадать Ваш следующий вопрос - как при загрузке пакета автоматически зарегистировать все объявленные в нем классы.
:о)
← →
HydraMarat (2004-03-06 00:23) [10]Да не... Мне нужно было поймать процедуры регистрации. Соответствущию переменные (в Classes и, по-моему, в DesignIntf) я присвоил, так что теперь все чики-пики. :)
← →
Юрий Зотов © (2004-03-06 00:27) [11]> HydraMarat (06.03.04 00:23) [10]
> так что теперь все чики-пики
Думаю, это пока что. Месяцев на несколько. А потом...
:о)
← →
Petr V. Abramov © (2004-03-06 01:41) [12]> Юрий Зотов © (06.03.04 00:27) [11]
<offtop>
А потом сто умных не ответят :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c