Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отличие библиотеки dll от подключаемого модуля 
:(
    Опции темы
Нитонисе
Дата 28.3.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Допустим есть некий набор функций, которые я поместил в отдельный модуль. Его я подключаю к своему приложению директивой 
Код

#include "Unit.h"

Насколько я понимаю эти же свои функции я могу поместить в dll и так же использовать их в своей программе. При этом вместе с исполняемым файлом мне также понадобится конечному пользователю предоставить и библиотеку. Мне кажется это минус для dll. Так какие в этих библиотеках есть преимущества?
PM MAIL   Вверх
DCamer
Дата 28.3.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(Нитонисе @  28.3.2010,  16:40 Найти цитируемый пост)
также понадобится конечному пользователю предоставить и библиотеку. Мне кажется это минус для dll

Установщик - это плюс, если есть не только исполняемый файл, но и библиотеки
Цитата(Нитонисе @  28.3.2010,  16:40 Найти цитируемый пост)
Так какие в этих библиотеках есть преимущества?

Уменьшение веса исполняемого файла, что ускоряет его запуск.

Добавлено через 4 минуты и 1 секунду
Нитонисе, вот что говорит MSDN
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Нитонисе
Дата 28.3.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(DCamer @  28.3.2010,  16:45 Найти цитируемый пост)
Уменьшение веса исполняемого файла, что ускоряет его запуск.

Но загрузка функции из DLL вероятно происходит медленнее.

Вообще я так понял польза от DLL в модульности. То есть если разработат модуль Unit.h/Unit.cpp и подключить его в программу, то если нам что-то надо будет поменять в этом модуле - нужно будет менять всю программу его использующую и перекомпилировать. А если используем dll, то можно поменять только код в библиотеке, не трогая основную программу. Правда при этом должно выполняться условие, что функции, использующиеся из этой библиотеки, должны быть объявлены так как они работают в программе, то есть возвращать те же значения и принимать те же параметры. Иначе без изменения самой программы не обойтись.
PM MAIL   Вверх
vikaz
Дата 28.3.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(Нитонисе @  28.3.2010,  19:07 Найти цитируемый пост)
Но загрузка функции из DLL вероятно происходит медленнее.

Вообще я так понял польза от DLL в модульности. То есть если разработат модуль Unit.h/Unit.cpp и подключить его в программу, то если нам что-то надо будет поменять в этом модуле - нужно будет менять всю программу его использующую и перекомпилировать. А если используем dll, то можно поменять только код в библиотеке, не трогая основную программу. Правда при этом должно выполняться условие, что функции, использующиеся из этой библиотеки, должны быть объявлены так как они работают в программе, то есть возвращать те же значения и принимать те же параметры. Иначе без изменения самой программы не обойтись. 

Это самое простое! Вообще DLL разрабатывалось для того, чтобы вынести часто используемые функции в отдельные библиотеки, чтобы несколько программ могли использовать этот код. Это дальше пошло развитие А-ЛЯ само подключаемые плагины и т.д. и т.п. Плюсов тут несколько:
1. Уменьшение загрузки исполняемого файла, что позволяет ему запускаться быстрее;
2. Уменьшение размера самого исполняемого файла, т.к. некоторый функционал вынесен в библиотеки;
3. Удобно расширять и адаптировать программы под нужды пользователя. (Допустим, ваша программа работает с БД MySQL, весь функционал по работе с данной БД у Вас вынесен в отдельную Dll. Работа между Dll и программой описано определенным интерфейсом. Позже Вы решили, что программа еще должна работать с локальной БД, допустим SQLite. Вы создаете новую Dll которая описывает работу с этой БД и отдаете её клиенту. А интерфейс работы между Dll  и программой не изменился, так как он одинаков. Как видно из этого простого примера мы имеем сл. плюсы:
1. Не нужно переписывать код в основной программе
2. Клиент в любой момент может переключатся между различными БД)
Для того чтобы использовать Dll как описали Вы должно быть выполнено несколько условий:
1. Dll должна подключаться только динамически;
2. Название функций и параметры вызова не должны измениться.






--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 29.3.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  28.3.2010,  19:33 Найти цитируемый пост)
1. Уменьшение загрузки исполняемого файла, что позволяет ему запускаться быстрее;

Это только при повторной загрузке - при первой наоборот - дольше за счет дополнительной загрузки библиотеки и вызова функций.

Хотя честно говоря - все эти как бэ скоростные вещи при современном развитие - просто лол  
PM MAIL   Вверх
nick42
Дата 18.5.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.5.2010

Репутация: нет
Всего: нет



Помогите начинающему (дилетанту)!  Сконструировал простенькую программку и dll-ку к ней. Добился, что работают в паре (при вызове dll активируется и появляется панель с контролами). Теперь хочу добиться, чтобы она воспроизводила мелодию (из ресурса) - использую
   sndPlaySound("fragment1",SND_RESOURCE)    из  mmsystem.hpp
В программе это работает, а для dll, думаю, нужно добавить модальность, запихнуть в трей или как-то еще. Проясните популярно... .
PM MAIL   Вверх
Dem_max
Дата 18.5.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

Это только при повторной загрузке - при первой наоборот - дольше за счет дополнительной загрузки библиотеки и вызова функций.

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

Цитата

В программе это работает, а для dll, думаю, нужно добавить модальность, запихнуть в трей или как-то еще. 

Да без разницы везде будет работать что в отдельном EXE что в DLL


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
nick42
Дата 19.5.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.5.2010

Репутация: нет
Всего: нет



Да, действительно, - немного ее "повертел" и звук появился. Но мне не нравится, что программа ожидает конца звучания. Весь расчет был на то, чтобы dll-ка позволила программе отвязаться от этого процесса. А вот запускать процесс отдельной ниткой я не умею. Если знаете - как, то, пожалуйста, подскажите. В прилагаемом архиве тест-пример; там очень немного текста, буквально несколько строк (для BCB 5.0).
Благодарю за помощь.
 smile 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Prog.zip 53,02 Kb
PM MAIL   Вверх
xvr
Дата 19.5.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Добавь опцию SND_ASYNC ко 2му параметру sndPlaySound
Код

 sndPlaySound("fragment1",SND_RESOURCE|SND_ASYNC);


PM MAIL   Вверх
nick42
Дата 19.5.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.5.2010

Репутация: нет
Всего: нет



xvr, спасибо большое! Похоже, это то, что мне нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.