Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть внешние компоненты, которые распространяются в виде dll и пары .h. В одном из хедеров описание класса, в другом функции для С. Dll экспортирует функцию создания класса. Делаю LoadLibrary, GetProcAddress с названием функции создания класса. Получаю функцию, вызываю, возвращает что-то. Пытаюсь вызвать метод класса у этого чего-то и случается странное... по логу этой библиотеки как будто бы вызывается не тот метод который мне надо, а другой(или вообще с середины). В чем может быть проблема? лишнее опустил. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 16:05 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Библиотек собрана mingw, у меня студия 2013. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 16:09 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Или без линкования lib (которой нет) так не прокатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 16:36 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
chikanokВ чем может быть проблема? Неправильное объявление класса в заголовке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 16:51 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
точнее там объявлен "интерфейс". а что может быть не так? ну и функции для С без lib тоже не получится использовать, т.к. при линковке спросит "где" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:09 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
В одном из хедеров описание класса, в другом функции для С. Именно для C , или всё же для С++? В чем может быть проблема? Ну на самом деле проблема может быть в чём угодно, там на каждом этапе может быть много проблем разных. Я бы пока рекомендовал, если есть возможность, линковать .dll статически, через библиотеку импорта. Так по крайней мере линкер всё проверит, и если будут проблемы, сообщит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:15 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
chikanokну и функции для С без lib тоже не получится использовать, т.к. при линковке спросит "где" ? Не спросит. Линкер GCC достаточно умён чтобы линковать прямо с DLL. Для MSVC штатная утилита implib создаст lib из def для любой dll. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:20 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
MasterZiv Именно для C , или всё же для С++? extern "C" { ... SHARED_EXPORT int SHARED_CCA Check(void *ptr); ... } MasterZiv Я бы пока рекомендовал, если есть возможность, линковать .dll статически, через библиотеку импорта. Так по крайней мере линкер всё проверит, и если будут проблемы, сообщит. Проблема в том что единственное что у меня есть это dll, пара .h и .exe (тестовая прога, с ней все ок). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:21 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovchikanokну и функции для С без lib тоже не получится использовать, т.к. при линковке спросит "где" ? Не спросит. Линкер GCC достаточно умён чтобы линковать прямо с DLL. Для MSVC штатная утилита implib создаст lib из def для любой dll. В общем, ты прав, но implib нет в MSVC. Есть dumpbin и link, один делает .def файл, другой из него может сделать .lib. implib есть только в дельфях/билдерах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:42 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе спросит. Линкер GCC достаточно умён чтобы линковать прямо с DLL. Дело в том, что не с каждой .dll можно слинковаться в принципе. Не во всех .dll есть символьные названия функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:44 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
MasterZivDimitry SibiryakovНе спросит. Линкер GCC достаточно умён чтобы линковать прямо с DLL. Дело в том, что не с каждой .dll можно слинковаться в принципе. Не во всех .dll есть символьные названия функций. ээээ... ты такие заявления режь лучше на два отдельных поста и с объяснениями. Не всегда файл с расширением .dll является Dinamic Load Library. Это может быть все что угодно на самом деле. Существуют несколько форматов DLL (например в современных виндах есть Win32, .Net, и dll+manifest). Все три вида требуют "слегка" разных подходов. DLL (Win32-style) действительно может не иметь символьных названий для экспортируемых точек входа, но они всегда будут иметь какой-то номер и соответственно: даже если нету символьных имен, можно линковать по номеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 17:56 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
chikanokПроблема в том что единственное что у меня есть это dll, пара .h и .exe (тестовая прога, с ней все ок). Ну на самом деле, как я уже устал всем повторять, если у тебя есть только .dll, то в общем случае слинковаться с ней невозможно. Нужно обязательно иметь .lib. Ну и странно, что .h у тебя есть, а .lib нету. Где ты их брал? Может там и .lib дадут ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 22:19 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
White OwlMasterZivпропущено... Дело в том, что не с каждой .dll можно слинковаться в принципе. Не во всех .dll есть символьные названия функций. ээээ... ты такие заявления режь лучше на два отдельных поста и с объяснениями. Не всегда файл с расширением .dll является Dinamic Load Library. Это может быть все что угодно на самом деле. Согласен. И наоборот, библиотеки динамической компановки могут иметь другие расширения, не обязательно .dll. Намример, .vcl или даже .exe. White OwlСуществуют несколько форматов DLL (например в современных виндах есть Win32, .Net, и dll+manifest). Все три вида требуют "слегка" разных подходов. DLL (Win32-style) действительно может не иметь символьных названий для экспортируемых точек входа, но они всегда будут иметь какой-то номер и соответственно: даже если нету символьных имен, можно линковать по номеру. Можно, но в программе на C ты функции по номеру не будешь вызывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 22:21 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо!!! Для студии сделал lib с помощью dumpbin и lib. Под линукс так слинковалось (был еще so файл). С линуксом опыта почти нет. Насколько понял положить либу рядом не достаточно ? Для тестов добавил в переменную окружения (export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib/dir ). А как надо по уму "устанавливать" библиотеку? Программка является расширением для ноды. Их вроде при установке не принято никуда перекладывать, где собрали там и используют. Либу хотелось бы тоже держать рядом и может быть даже в нескольких местах (например разные версии расширения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 03:19 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
chikanokА как надо по уму "устанавливать" библиотеку? Саму библиотеку или ссылку на неё закинуть в /usr/lib или /usr/lib64 в соответствии с разрядностью. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 11:13 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
chikanokС линуксом опыта почти нет. Насколько понял положить либу рядом не достаточно ? Для тестов добавил в переменную окружения (export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib/dir ). А как надо по уму "устанавливать" библиотеку? В принципе, так и устанавливать, положить в один из каталогов, понимаемых ld По большому счёту, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:27 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
MasterZivесли у тебя есть только .dll, то в общем случае слинковаться с ней невозможно. Нужно обязательно иметь .libВполне достаточно документации и штатных утилит для получения списка экспортов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 17:17 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovMasterZivесли у тебя есть только .dll, то в общем случае слинковаться с ней невозможно. Нужно обязательно иметь .libВполне достаточно документации и штатных утилит для получения списка экспортов. Ребята, ещё раз повторяю, в 125 раз. Не во всех .dll есть точки экспорта в виде символьных наименований функций. Например, в системных библиотеках Windows экспорт идёт по номеру функции, символьных имён там нет. Имена символов храняться только в библиотеках импорта, сгенерированных для этих .dll во время сборки этих .dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 20:11 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
MasterZivНе во всех .dll есть точки экспорта в виде символьных наименований функций. Например, в системных библиотеках Windows экспорт идёт по номеру функции, символьных имён там нет.Спасибо, Капитан Очевидность. Только если экспорт идёт исключительно по номерам, то в документации расписано соответствие номеров экспорта именам, которые будут использоваться в тексте программы. Более того, номера указываются и тогда, когда есть экспорт по именам, т.к. загрузка по номеру делается быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 20:28 |
|
||
|
Использование класса из динамически загруженной библиотеки (LoadLibrary)
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovMasterZivНе во всех .dll есть точки экспорта в виде символьных наименований функций. Например, в системных библиотеках Windows экспорт идёт по номеру функции, символьных имён там нет.Спасибо, Капитан Очевидность. Только если экспорт идёт исключительно по номерам, то в документации расписано соответствие номеров экспорта именам, которые будут использоваться в тексте программы. Более того, номера указываются и тогда, когда есть экспорт по именам, т.к. загрузка по номеру делается быстрее. Вовсе не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2015, 08:01 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39028184&tid=2018881]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
82ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 198ms |

| 0 / 0 |
