crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  « < 2 3 4  
Ответить в данную темуНачать новую тему
> Использование сторонних библиотек, Как использовать функции из .dll?
BRE
  опции профиля:
сообщение 23.4.2010, 14:46
Сообщение #31


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Iron Bug @ 23.4.2010, 15:29) *
я знаю, что именно ты путаешь с динамической загрузкой. есть т.н. динамическая линковка.

Я путаю? Перечитай мои посты, по-моему это ты путаешь. ;)
Я тут про динамическую линковку и распинаюсь, а ты мне какие-то базовые понятия про разделяемые библиотеки пишешь. :)

Цитата(Iron Bug @ 23.4.2010, 15:29) *
но это линковка по номерам входов. загрузка библиотеки происходит при загрузке основного модуля (msvcrt генерит автоматический код)

Ни msvcrt.dll, ни kernel32.dll, ни какая другая dll ничего генерить уже не может, генерть может линкер, основываясь на этих самых библиотеках импорта или новые линкеры, которые по сути сами формируют таблицу импорта без генерации этих библиотек.

Цитата(Iron Bug @ 23.4.2010, 15:29) *
но это не универсальный метод, в том смысле, что при существенных изменениях в библиотеке номера входов могут меняться и тогда кердык всем зависящим от этих номеров приложениям.

Мы говорим не о плюсах/минусах, а о том как это происходит и почему/зачем вместе с dll генерируется файл .lib (.a).

Фух. :)

Сообщение отредактировал BRE - 23.4.2010, 14:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.4.2010, 17:57
Сообщение #32


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


я вообще-то изначально отвечала на исходный вопрос.
Цитата(azure @ 22.4.2010, 14:52) *
Имеется девайс (pci-карта gpib) с драйверами и .dll + .h с функциями работы с устройством. dll идут под MS Visual C++ и Borland C++ Builder. Можно ли использовать эти .dll без использования вышеуказанных компиляторов? Конкретно интересует gcc/mingw? Если можно, то как?

так как были даны неверные ответы про необходимость lib'ов, я ответила, что да, можно. и привела примеры. у меня интелловский компилятор вполне нормально общается с любыми dll под венду, при этом для работы требуются только заголовочники и сама dll.
Цитата(BRE @ 23.4.2010, 17:46) *
Ни msvcrt.dll, ни kernel32.dll, ни какая другая dll ничего генерить уже не может, генерть может линкер, основываясь на этих самых библиотеках импорта или новые линкеры, которые по сути сами формируют таблицу импорта без генерации этих библиотек.

ну тут я просто неточно выразилась. на самом деле, линкер тащит прототип загрузчика из msvcrt и прилепляет его к модулю. а в kernel32 хранится та самая функция, которая загружает динамически библиотеку при вызове LoadLibrary и выполняет динамическую линковку точек входа при выполнении программы.

я не буду спорить. если хочется зависимости от версии драйвера - делайте как хотите. линкуйте через таблицы импорта. дело ваше. я пояснила, в чём вред такого метода. по-моему, написать пару лишних строк кода и отделаться от перекомпиляции приложения под каждую новую dll от производителя дров - не такая уж плохая идея.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.4.2010, 20:48
Сообщение #33


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Тему разделил: Сборка библиотеки под ОС Symbian
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 26.4.2010, 7:48
Сообщение #34


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(Iron Bug @ 23.4.2010, 21:57) *
ну тут я просто неточно выразилась. на самом деле, линкер тащит прототип загрузчика из msvcrt и прилепляет его к модулю. а в kernel32 хранится та самая функция, которая загружает динамически библиотеку при вызове LoadLibrary и выполняет динамическую линковку точек входа при выполнении программы.

И опять ты не точно выразилась. :)
msvcrt - это Microsoft C Runtime Libraryю там сидят функции рантайма типа fopen и abort.
А к модулю прицепляется стартовая функция, которая потом вызывает main, или, если модуль собирается в dll-ку, то DllEntryPoint.
Эти стартовые функции свои для каждого компилятора и живут в статических библиотеках.

Цитата(Iron Bug @ 23.4.2010, 21:57) *
я не буду спорить. если хочется зависимости от версии драйвера - делайте как хотите. линкуйте через таблицы импорта. дело ваше. я пояснила, в чём вред такого метода. по-моему, написать пару лишних строк кода и отделаться от перекомпиляции приложения под каждую новую dll от производителя дров - не такая уж плохая идея.

Динамическая линковка возможна как по ординалам, так и по именам.
По именам - по умолчанию, если есть и то и другое.
Т. е. перелинковывать приложение при изменении dll-ки требуется только в том случае, если изменились имена и/или сигнатуры.
Но в этом случае тебе всё равно придётся не только перелинковывать, но корректировать текст вызова и перекомпилять приложение.

Фича динамической линковки в том, что если при старте все указанные dll-ки подгружаются и их импорты разрешаются (резольвятся).
И при обломе приложение не стартует.
Явный минус в том, что на это тратится время и память на старте и dll-ка постоянно висит в памяти, даже в случае, когда она нужна только какой-нибудь редкой и экзотической функции.
Когда это становится критичным, например с плагинами, применяют динамическую загрузку.
Да, в винде есть ещё механизм отложенной загрузки - когда dll-ка подгружается системой не при старте а при первом обращении.

Перечитай Джеффри Рихтер-а "Windows для профессионалов" - там очень подробно описано про динамическую линковку. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  « < 2 3 4
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 12:11