crossplatform.ru

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

azure
  опции профиля:
сообщение 22.4.2010, 11:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

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




Репутация:   0  


Вопрос не столько по кросплатформенности, сколько по Qt + .dll в винде. Имеется девайс (pci-карта gpib) с драйверами и .dll + .h с функциями работы с устройством. dll идут под MS Visual C++ и Borland C++ Builder. Можно ли использовать эти .dll без использования вышеуказанных компиляторов? Конкретно интересует gcc/mingw? Если можно, то как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 23.4.2010, 14:29
Сообщение #2


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

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

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




Репутация:   12  


Цитата(BRE @ 23.4.2010, 17:07) *
А кто прикрепляет к юзерскому коду заголовок (а точнее таблицу импорта)? И откуда эта таблица берется?

см. код. когда ты линкуешь метод, вызывая GetProcAddress - система просматривает внутреннюю таблицу экспорта dll и, если находит метод с запрашиваемым именем, то подгружает его. имя это ты можешь выбирать вообще динамически. то есть, ты можешь написать программу для выполнения любого метода любой библиотеки, задавая их через юзерский интерфейс. и никакие lib'ы и статическая информация тут не нужны. в этом случае на этапе компиляции и линковки никаких предположений об адресе функции не делается вообще.
я знаю, что именно ты путаешь с динамической загрузкой. есть т.н. динамическая линковка. но это линковка по номерам входов. загрузка библиотеки происходит при загрузке основного модуля (msvcrt генерит автоматический код) и в модуле буквально прописываются связи типа "вызов метода номер 2 из библиотеки такой-то". и вот именно для этого и нужны эти самые таблицы импорта. но это не универсальный метод, в том смысле, что при существенных изменениях в библиотеке номера входов могут меняться и тогда кердык всем зависящим от этих номеров приложениям. при этом при смещении номеров происходит вызов не той функции (причём система не проверяет этого) и программа чаще всего просто падает с access voilation. мелкософт обозвали это явление hell dll и начали городить огород с системой хранения версий в весьма дурацком стиле. а в линюксе для этого изначально были методы (приписывание версии к названию .so библиотеки).
кроме этого, есть ещё гарантированно работающая статическая линковка, понятное дело.

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

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


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

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- azure   Использование сторонних библиотек   22.4.2010, 11:52
- - Litkevich Yuriy   Цитата(azure @ 22.4.2010, 15:52) Можно ли...   22.4.2010, 12:16
|- - azure   Спасибо за подробные указания. Как узнать, сделана...   22.4.2010, 12:29
- - Litkevich Yuriy   Цитата(azure @ 22.4.2010, 16:29) "по...   22.4.2010, 12:58
- - Влад   Посмотри экспорты этой DLL (например, утилитой Dep...   22.4.2010, 13:00
- - Tonal   Можно использовать dll-ку собранную одним компилят...   22.4.2010, 13:03
- - Litkevich Yuriy   Цитата(Влад @ 22.4.2010, 17:00) Если в эк...   22.4.2010, 13:40
- - Iron Bug   Цитата(Litkevich Yuriy @ 22.4.2010, 16:40...   22.4.2010, 14:39
- - Litkevich Yuriy   я имел в виду "возможно ли на этапе компиляци...   22.4.2010, 15:49
|- - azure   Цитата(Litkevich Yuriy @ 22.4.2010, 15:49...   22.4.2010, 16:08
- - Litkevich Yuriy   Цитата(azure @ 22.4.2010, 20:08) .lib (эт...   22.4.2010, 16:12
|- - BRE   Цитата(Litkevich Yuriy @ 22.4.2010, 17:12...   22.4.2010, 16:18
- - Litkevich Yuriy   ага, т.е. если у меня в распоряжении только dll...   22.4.2010, 16:38
|- - BRE   Цитата(Litkevich Yuriy @ 22.4.2010, 17:38...   22.4.2010, 16:47
- - Iron Bug   люди, у меня такое ощущение, что у вас в голове си...   22.4.2010, 20:23
|- - BRE   Цитата(Iron Bug @ 22.4.2010, 21:23) а то ...   22.4.2010, 20:36
- - Iron Bug   Цитата(BRE @ 22.4.2010, 23:36) А мы про в...   22.4.2010, 20:43
|- - BRE   Цитата(Iron Bug @ 22.4.2010, 21:43) принц...   22.4.2010, 20:48
- - Iron Bug   Цитата(BRE @ 22.4.2010, 23:48) Разве. с т...   22.4.2010, 21:41
- - BRE   венда/линукс под рукой есть? Сделай небольшой прим...   22.4.2010, 21:45
- - Iron Bug   ну вот тебе кусок из реального проекта. весь не пр...   22.4.2010, 23:36
|- - BRE   Мы говорим про венду! Посмотри внимательно, чт...   23.4.2010, 6:29
- - Litkevich Yuriy   Цитата(BRE @ 23.4.2010, 10:29) dll нельзя...   23.4.2010, 8:27
|- - BRE   Цитата(Litkevich Yuriy @ 23.4.2010, 9:27)...   23.4.2010, 8:57
- - Tonal   В винде не все линкеры умеют пользоваться символам...   23.4.2010, 9:02
- - Iron Bug   Цитата(BRE @ 23.4.2010, 9:29) Мы говорим ...   23.4.2010, 11:56
- - BRE   Iron Bug, ты все динамические библиотеки загружаеш...   23.4.2010, 12:21
- - Iron Bug   Цитата(BRE @ 23.4.2010, 15:21) Iron Bug, ...   23.4.2010, 13:52
|- - BRE   Цитата(Iron Bug @ 23.4.2010, 14:52) и нев...   23.4.2010, 14:07
- - Iron Bug   Цитата(BRE @ 23.4.2010, 17:07) А кто прик...   23.4.2010, 14:29
|- - BRE   Цитата(Iron Bug @ 23.4.2010, 15:29) я зна...   23.4.2010, 14:46
- - Iron Bug   я вообще-то изначально отвечала на исходный вопрос...   23.4.2010, 17:57
|- - Tonal   Цитата(Iron Bug @ 23.4.2010, 21:57) ну ту...   26.4.2010, 7:48
- - Litkevich Yuriy   Тему разделил: Сборка библиотеки под ОС Symbian   23.4.2010, 20:48


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.7.2025, 20:43