Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Класс в DLL [D7, Win2k, WinXP]


Страницы:   1 2

TPA ©   (2006-06-03 11:34:00) 

Здравствуйте!
У меня появилась проблема. Есть класс, ну допустим
TMyButton = class(TButton)
Если я это класс помещу в DLL, как мне его использовать в моей программе?


jack128   (2006-06-06 00:26:00) [1]

бр. не дочитал тему до конца :-) извени.


jack128   (2006-06-06 00:26:00) [2]

Loginov Dmitry ©   (05.06.06 11:36) [17]
Почему Delphi включает код Matrix'a в пакет EKGVisio7

затем, что ТЫ так указал.

Loginov Dmitry ©   (05.06.06 11:36) [17]
Как этого избежать?

Добавить в секцию requires пакет EKGVisio7 - пакет Matrix


Neo Trinitron   (2006-06-05 18:40:00) [3]

Если я это класс помещу в DLL, как мне его использовать в моей программе?

Без проблем. Только обычные DLL для этого не катят, надо создавать обьекты автоматизации (ActiveX называется, если не ошибаюсь). Тоже получаются DLL и можно создавать свои обьекты с этой DLL.


Loginov Dmitry   (2006-06-05 12:40:00) [4]

Сам дошел по истины :)

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


Loginov Dmitry   (2006-06-05 11:36:00) [5]

У меня трабл с пакетами. Загнал Matrix в пакет - получилось 2 файла: Matrix70.bpl и Matrix70.dcp.

Далее пытаюсь откомпилировать компонент, использующий Matrix. Компилирует с нехорошим сообщением: "Unit 'Matrix' implicitly imported into package 'EKGVisio7'".
Без пакетов компиляция проходит нормально, но с подключением пакетов проект не компилится - пишет
[Error] Packeges 'EKGVisio7' and 'Matrix70' both contain unit 'Matrix'
[Fatal Error] Could not compile package 'EKGVisio7'


Почему Delphi включает код Matrix'a в пакет EKGVisio7? Как этого избежать?


saxon   (2006-06-05 11:05:00) [6]

> TPA
Может механизм интерфейсов подойдет?


Loginov Dmitry   (2006-06-04 23:38:00) [7]

Ясно! Спасибо!


Юрий Зотов   (2006-06-04 23:11:00) [8]

> Loginov Dmitry ©   (04.06.06 22:52) [13]

> Как заставить BPL "служить библиотекой классов"?
> Подозреваю, что придется все-таки описывать прототипы (или
> интерфейсы, как правильно?)

При статической загрузке BPL - не придется. Просто пишете в Uses юнитов программы нужные юниты из BPL, как обычно - и все. Вы же ничего специально не описываете, когда компилите обычную программу с run-time пакетами VCL? Нет. А она использует соотвеисивующие BPL - и все работает.

А при динамичесткой загрузке BPL - да, придется описывать. Но чтобы не делать этого специально, все классы, которые используются и Exe и BPL, можно вынести в отдельный пакет.


Loginov Dmitry   (2006-06-04 22:52:00) [9]

Все это я уже знаю (в Интернете про это к счастью пишут). Интересует следующий момент: что значит

> BPL - это самая обычная DLL,
> только для нее компилятор автоматически генерирует
> функции-оболочки для методов/свойств класса


?

Как заставить BPL "служить библиотекой классов"?
Подозреваю, что придется все-таки описывать прототипы (или интерфейсы, как правильно?) всех классов, используемых в пакете. Как в этом случае описывать классы. Автоматизирует ли этот процесс Delphi.
В общем, дополнительная литература бы не помешала.


DrPass   (2006-06-04 19:05:00) [10]


> А то я ну никак не могу понять, чем собственно отличается
> хранение классов в DLL от хранения классов в BPL.

Ничем не отличается. BPL - это самая обычная DLL, только для нее компилятор автоматически генерирует функции-оболочки для методов/свойств класса, функции-указатели на его VMT, указатели на секции инициализации-финализации, т.е. избавляет программиста от кучи рутинной работы.
Главный недостаток - для избежания вот этого
> В итоге получаем несостыковку и дублирование кода VCL.

общие глобальные модули для пакетов и приложения должны быть где-то вынесены отдельно. Отдельно - читай "тоже в BPL". А следовательно, если ты используешь свою BPL, тебе уже не отвертеться и от многомегабайтных vcl***.bpl, rtl***.bpl.


Юрий Зотов   (2006-06-04 14:32:00) [11]

> Loginov Dmitry ©   (04.06.06 13:44) [10]

Дык... а какая там документация нужна? Создаем run-time пакет, в нем пишем все, что угодно и компилируем в каталог Exe, либо в каталог, доступный через Path. Сама программа пишется обычным образом, но в ее опциях указываем, что ее надо компилировать с этим run-time пакетом. Cамо собой, BPL должен поставляться юзеру вместе с программой. Вот и вся документация.

А чем отличается - тем, что DLL и Exe компилируются ОТДЕЛЬНО друг от друга и друг о друге ничего не знают. В каждом из них СВОЯ VMT каждого класса (даже если это фактически один и тот же класс, то это все равно получатся РАЗНЫЕ классы), СВОИ глобальные объекты (Application, Screen, Sessoin и др.), СВОИ значения глобальных переменных (DecimalSeparator и др.) - и т.п. В итоге получаем несостыковку и дублирование кода VCL.

А в случае BPL экзешник компилируется с его учетом, поэтому дублирования нет и все прекрасно стыкуется.

Вообще, DLL ведь изначально задумывались именно как библиотеки функций или ресурсов. Служить библиотеками классов (тем более, дельфишных) им как-то несвойственно - так зачем же желать странного и возлагать на них функции, для которых они изначально не предназначены? Это примерно то же самое, что есть суп вилкой - в принципе, можно, но с некоторыми затруднениями.


Loginov Dmitry   (2006-06-04 13:44:00) [12]

Юрий Зотов ©   (03.06.06 11:40) [2]
Или в BPL, тоже проблем не будет


Юрий, вы не могли бы дать ссылочку на материал по хранению классов в BPL. А то я ну никак не могу понять, чем собственно отличается хранение классов в DLL от хранения классов в BPL. Где вообще есть подробная информация о работе с пакетами?


sniknik   (2006-06-04 12:45:00) [13]

да уж, достали доморощенные "психологи", со своими подначками "на слабо". хотя... некоторые "ведутся", иначе давно бы уже изжил бы себя подобный стиль "общения" как безрезультатный.

> Проблемы нас не пугают:)
ясное дело не пугают, ты же их сходу на других пытаешся переложить, сам даже не попытался решить. а другим то как раз твои проблемы до фени, они знают что можно без них, как правильно, и так и делают, про что и тебе сказали, но....


Leonid Troyanovsky   (2006-06-04 12:07:00) [14]


> TAK   (04.06.06 11:51) [7]


Не надо проецировать свои проблемы с пониманием на других.
И, вообще, извини, но я с агрессивными анонимами не общаюсь.

--
Regards, LVT.


TAK   (2006-06-04 11:51:00) [15]

Удалено модератором


Leonid Troyanovsky   (2006-06-04 11:38:00) [16]


> TAK   (04.06.06 11:37) [5]

> Может легче сказать НЕ ЗНЮ?


Может быть и легче, но я сказал то, что хотел сказать.

--
Regards, LVT.


TAK   (2006-06-04 11:37:00) [17]

Сочувствую, но ЮМОР заценил :) Может легче сказать НЕ ЗНЮ?


Leonid Troyanovsky   (2006-06-04 11:33:00) [18]


> TAK   (04.06.06 11:25) [3]

> Проблемы нас не пугают:)


Зато, они пугают нас.

--
Regards, LVT.


TAK   (2006-06-04 11:25:00) [19]

Проблемы нас не пугают:) Вот где бы найти идею?
Неужели не возможно сделать что-то типа Parent := Self после создания экземпляра TMyButton, но Self должен быть THandle или HWND :(((((


Юрий Зотов   (2006-06-03 11:40:00) [20]

Или в BPL, тоже проблем не будет. А с DLL - могут быть проблемы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо