В чем различие между OCX и DLL

Создание, использование компонентов ActiveX
Ant
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 16.08.2004 (Пн) 13:27
Откуда: Старый Оскол

В чем различие между OCX и DLL

Сообщение Ant » 16.08.2004 (Пн) 13:44

Вопрос из темы вполне понятен, наверное. Кто-нить может дать ссылку где о них прочитать можно (создание, пользование созданных, различие между DLL, а то при создании можно несколько разных сделать В ЧЕМ РАЗНИЦА???)

DmitriyIT
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 01.08.2004 (Вс) 13:16

Сообщение DmitriyIT » 16.08.2004 (Пн) 15:03

Попробую как нибудь объяснить разницу...
DLL - Dynamic Link Library - в простом понимании просто контейнер для ряда функций(методов) и переменных, динамически подключаемых к программе, чтобы их можно было оттуда использовать. При этом это не объект! И соответственно термины ООП(объектно-ориентированного программирования) к ней напрямую не применимы. Визуальной формы нет, соответственно все значения и функции, например, TextBox можно записать в DLL, но сам объект TextBox использовать из нее нельзя(например нельзя разместить его на форме).
ActiveX Control (OCX) - это объект с заданными интерфейсами, к которому как раз применимы все признаки ООП: абстракция(создание пользовательских типов данных), инкапсуляция(группирование и защищенность данных по классам), наследование(принимать свойства другого объекта) и полиморфизм(вариативность интерфейсов). Например, ты можешь создать OCX контрол MyTextBox с функциями как у обычного TextBox + твоими собственными. В него можно будет вводить текст, размещать его на форме и т.п. - т.е. он будет по всем возможностям равен встроенным в VB компонентам.
Для конкретной задачи и делается выбор - что создавать: DLL или OCX. Например, если в программе потребовались сложные математические функции, можно написать DLL и вызывать их оттуда, а OCX имеет мало смысла - визуальная форма ведь не нужна... А для красивой кнопочки или графопостроителя нужен OCX.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.08.2004 (Пн) 16:12

Имхо человек имел в виду конкретно ActiveX DLL, в которую можно запихать объекты.

Тогда различие очень простое - OCX может содержать публичные UserControl-ы, а ActiveX DLL - нет. Притом в OCX должен быть по крайней мере один публичный UserControl.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 17.08.2004 (Вт) 13:21

В добавление к вышесказанному: как следствие из этого, в случае OCX ты можешь использовать лицензирование, в то время как для внутренних компонентов это просто не имеет смысла - они все равно снаружи не видны :) .

Ant
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 16.08.2004 (Пн) 13:27
Откуда: Старый Оскол

Сообщение Ant » 18.08.2004 (Ср) 6:51

Спасибо за ответы. Я еще и инфу по этому делу нашел (книга). А вот если OCX я делалю на базе существующего контрола (ComboBox). Чтобы родные свойства комбобокса были видны пользователю мне их надо все объявить? Или будет возможно обращаясь к моему контролу видеть его свойства и как комбобокса?
[email]forMyWork#@#mail#.#ru[/email]

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.08.2004 (Ср) 10:36

Нет; все свойства, которые ты хочешь, чтобы были видны, надо объявлять.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 29.09.2004 (Ср) 11:46

Из всего выше сказанного я так понял, что основная разница между DDL и ActiveX наличие/отсутствие графического представления. Получается, что ActiveX можно использовать и в качестве простого DDL. Соответственно с некоторыми особеностями. Или я обманулся?
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.09.2004 (Ср) 12:00

Чудик писал(а):Из всего выше сказанного я так понял, что основная разница между DDL и ActiveX наличие/отсутствие графического представления. Получается, что ActiveX можно использовать и в качестве простого DDL. Соответственно с некоторыми особеностями. Или я обманулся?
Так всё и есть. Собственно, зачем нужны неграфические контролы (таймер, винсок, мскомм и т.п.) - я вообще не знаю.
Вернее, знаю - до VB5, кажется, события могли быть только у контролов. Ну а новые-то зачем создаются так?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.09.2004 (Чт) 13:44

1. У них сразу есть hwnd. Это позволяет заниматься псевдосабклассингом (типа обработки mouseup) без настоящего сабклассинга.
2. Их можно объединять в control arrays для массовой обработки.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.09.2004 (Чт) 21:22

GSerg писал(а):2. Их можно объединять в control arrays для массовой обработки.

Дык, а классы, что ли, нельзя в массивы объединять? :-?

И притом, у контролов на порядки больший overhead, чем у классов. Иногда, например для сабклассеров, это существенно.
Изображение


Вернуться в Компоненты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList