Я знаю, что это может показаться довольно обычным для вундеркиндов. Но я хочу сделать его кристально чистым.
Когда я хочу использовать DLL Win32, обычно я просто вызываю API, например LoadLibrary() и GetProcAdderss(). Но в последнее время я разрабатываю DirectX9, и мне нужно добавить файлы d3d9.lib, d3dx9.lib и т.д.
Я достаточно слышал, что LIB предназначен для статической привязки, а DLL - для динамической компоновки.
Итак, мое нынешнее понимание заключается в том, что LIB содержит реализацию методов и статически связан во время ссылки как часть окончательного EXE файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE файла.
Но иногда некоторые файлы LIB поставляются с DLL файлами, поэтому:
- Для чего нужны эти файлы LIB?
- Как они достигают того, для чего они предназначены?
- Есть ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?
Обновление 1
После проверки википедии я помню, что эти файлы LIB называются импортировать библиотеку. Но мне интересно, как это работает с моим основным приложением и динамическими загрузками DLL.
Обновление 2
Так же, как сказал RBerteig, в файлах LIB, связанных с DLL, есть код-заглушка. Таким образом, вызывающая последовательность должна быть такой:
Мое главное приложение → заглушка в LIB → реальной целевой DLL
Итак, какая информация должна содержаться в этих LIB? Я мог бы подумать о следующем:
- Файл LIB должен содержать полный путь к соответствующей DLL; Таким образом, DLL может быть загружена средой выполнения.
- Относительный адрес (или смещение файла?) каждой точки входа метода экспорта DLL должен быть закодирован в заглушке; Таким образом, могут быть сделаны правильные вызовы переходов/методов.
Я прав? Есть что-то еще?
BTW: Есть ли какой-либо инструмент, который может проверять библиотеку импорта? Если я увижу это, больше не будет никаких сомнений.