Страница 4 из 4

Re: 24|undefined reference to `__imp_SaveDC'|

Добавлено: 22 окт 2015, 19:26
Сионист
Romeo писал(а):И да, ответ на твой вопрос - DLL можно линковать как статически, там и динамически. В первом посте, где ты жаловался на ошибки линкера, происходит как раз статическая линковка.
В посте #22 линковка динамическая, ошибки нет, имя указателя на функцию совпадает с тем именем, на которое ругался линкер. А вот попробуйте те ка создать свою DLL, использующее его тестовое приложение, указать библиотеку импорта в свойствах проекта, скомпилировать оба проекта, запустить тестовое приложение, а потом готовую DLL стереть и ещё раз запустить то же самое тестовое приложение. Оно будет ругаться на отсутствие файла DLL. И не надо кивать на статическую линковку рантайма билдером, это в лучшем случае создание "на лету" целевой LIB на основе заменяемой ею DLL. Но целиком сам файл DLL со своим заголовком с файлом приложения в один не сливается, а вместо этого линкуются выдранные из DLL отдельные функции. И делается это совсем не так, просто добавить библиотеку в свойства проекта для этого не достаточно, надо поставить галочку статической линковки стандартного рантайма. Это если билдер вообще использует для этой цели именно DLL, а то ведь могли и заранее приложить LIB версии целевых библиотек и просто линковать или их, или DLL. Ну да, можно и функции выдрать, формат то известен. Только это уже будет не DLL, она лишь возьмётся за основу.

Re: 24|undefined reference to `__imp_SaveDC'|

Добавлено: 22 окт 2015, 20:38
Romeo
Ага, то есть "явно" в твоём понимании - это было "динамически"? А написать сразу нужное слово тяжело было? Или ты думаешь, что у тебя получается связно изъясняться не использую общепринятую терминологию? Ошибаешься. Тебя порой вообще невозможно понять, когда переходишь на кустарные словечки.

И, кстати, о том, как это делается во взрослом программировании. Динамическая загрузка библиотек используется только тогда, когда наличие библиотеки или функции в ней опционально, либо имя библиотеки неизвестно на этапе компиляции. Если же о библиотеке всё известно и она должна грузиться/вызываться всегда, то используется исключительно статическая линковка. Переходить на динамическую загрузку библиотеки лишь потому, что интерфейсная либка кривая - это студенческий подход "сделаем как-нибудь, лишь бы работало".

Последний раз говорю, переустанови компилятор - это самое правильное решение.