Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Класс в DLL   Найти похожие ветки 

 
TPA   (2006-06-03 11:34) [0]

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


 
Loginov Dmitry ©   (2006-06-03 11:37) [1]

Никак. Помести этот класс в основной программе, и используй его сколько влезет.


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

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


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

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


 
Leonid Troyanovsky ©   (2006-06-04 11:33) [4]


> TAK   (04.06.06 11:25) [3]

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


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

--
Regards, LVT.


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

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


 
Leonid Troyanovsky ©   (2006-06-04 11:38) [6]


> TAK   (04.06.06 11:37) [5]

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


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

--
Regards, LVT.


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

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


 
Leonid Troyanovsky ©   (2006-06-04 12:07) [8]


> TAK   (04.06.06 11:51) [7]


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

--
Regards, LVT.


 
sniknik ©   (2006-06-04 12:45) [9]

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

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


 
Loginov Dmitry ©   (2006-06-04 13:44) [10]

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


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


 
Юрий Зотов ©   (2006-06-04 14:32) [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 ведь изначально задумывались именно как библиотеки функций или ресурсов. Служить библиотеками классов (тем более, дельфишных) им как-то несвойственно - так зачем же желать странного и возлагать на них функции, для которых они изначально не предназначены? Это примерно то же самое, что есть суп вилкой - в принципе, можно, но с некоторыми затруднениями.


 
DrPass ©   (2006-06-04 19:05) [12]


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

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

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


 
Loginov Dmitry ©   (2006-06-04 22:52) [13]

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

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


?

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


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

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

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

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

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


 
Loginov Dmitry ©   (2006-06-04 23:38) [15]

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


 
saxon   (2006-06-05 11:05) [16]

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


 
Loginov Dmitry ©   (2006-06-05 11:36) [17]

У меня трабл с пакетами. Загнал 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? Как этого избежать?


 
Loginov Dmitry ©   (2006-06-05 12:40) [18]

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

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


 
Neo Trinitron ©   (2006-06-05 18:40) [19]

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

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


 
jack128 ©   (2006-06-06 00:26) [20]

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

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

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

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


 
jack128 ©   (2006-06-06 00:26) [21]

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



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

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
15-1149863069
Alien1769
2006-06-09 18:24
2006.07.16
Robotron-1715


2-1151552404
stock
2006-06-29 07:40
2006.07.16
выполнение winExec


3-1147684174
petvv
2006-05-15 13:09
2006.07.16
Help List index out of bounds (0)


4-1144313939
Eraser
2006-04-06 12:58
2006.07.16
Fast User Switching и интерактивный сервис.


15-1150688558
Kerk
2006-06-19 07:42
2006.07.16
Что такое FireBird