Цитата(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 для профессионалов" - там очень подробно описано про динамическую линковку.