Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

А кто-нибудь в DLL разбирается

362
03 апреля 2003 года
_kolyan
339 / / 03.12.2002
Есть два способа использования динамических библиотек в программе
Первый:
1) делаем LoadLibrary
2) берем указаели на нужные функции при помощи GetProcAddress
3) вызываем функции
Второй:
1) подключаем LIB-файл библиотеки к проекту
2) вызываем функции

в чем разница?
317
03 апреля 2003 года
Relax
573 / / 20.09.2000
разница, собственно говоря, в этом и заключается - в способе подключения DLL.
первый случай (с LoadLibrary) - динамическое подключение, второй - статическое. при статическом подключении можно использовать классы из dll а не только функции, но есть существенный недостаток - если изменяется код dll, то надо будет делать либу и пересобирать экзешник с новой либой - иначе из-за смещения адресов пойдут глюки...
при динамическом подключении можно юзать только функции, но зато получаем гибкость - код dll можно менять как угодно - главное чтобы имена функций оставались неизменными :)
это только то что видно, а на самом деле наверняка еще есть какие-то заморочки с использованием памяти...
362
03 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by Relax
разница, собственно говоря, в этом и заключается - в способе подключения DLL.



Что-ж, кое-что понятно.
Правда, при статическом подключении все-же можно менять код DLL. Можно добавлять новые, функции формы, ижменять старые функции. Глюки возникают только когда меняются параметры и возвращаемые значения функций, если программа на них уже ссылалась. У меня, по крайней мере, так происходит.
А вот на счет глюков с формами (о нем я уже говорил здесь на форуме):
При динамическом подключении DLL все нормально, а при статическом - каждая форма в программе, вдруг начинает создавать отдельную кнопку на панели задач, а главная форма иногда теряет способность сворачиваться. (при динамическом подкючении такое наблюдается, если строить проект без галок Use dynamic (собственно, если не dynamic тогда static и см. выше) и Build with runtime...)
Причем каждое окно видно в диспетчере, как отдельная задача (опять же при статическом подключении) и все это уже не зависит ни от каких галок в настройках.
Про это что-нибудь можешь сказать?

1.8K
03 апреля 2003 года
ALI
129 / / 10.01.2003
по поводу статического и динамического подключения

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

Про отображение формы в панели задач, помоему это
лечится примерно так

смотрим на конструкторы
 
Код:
__fastcall virtual TForm(Classes::TComponent* AOwner) : Forms::TCustomForm
(AOwner) { }
__fastcall TForm(Classes::TComponent* AOwner, int Dummy) : Forms::TCustomForm
(AOwner, Dummy) { }
__fastcall TForm(HWND ParentWindow) : TCustomForm(ParentWindow) { }


т.е. надо либо передать дескриптор какого либо окна из вашей программы либо
ваш Ваш Application в качестве владельца.
362
03 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by ALI

 
Код:
__fastcall virtual TForm(Classes::TComponent* AOwner) : Forms::TCustomForm
(AOwner) { }
__fastcall TForm(Classes::TComponent* AOwner, int Dummy) : Forms::TCustomForm
(AOwner, Dummy) { }
__fastcall TForm(HWND ParentWindow) : TCustomForm(ParentWindow) { }


т.е. надо либо передать дескриптор какого либо окна из вашей программы либо
ваш Ваш Application в качестве владельца.



Спасибо за подсказку.
Правда передача Application ничего не меняет, а вот если вызывать конструктор которому передается HWND, то все как надо!
Я очень долго с этим парился
еще раз спасибо :-)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог