Как работает библиотека импорта? Детали?

Я знаю, что это может показаться довольно простым для гиков. Но я хочу, чтобы это было предельно ясно.

Когда я хочу использовать Win32 DLL, обычно я просто вызываю такие 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 должен быть закодирован в заглушке; Так что правильные переходы / вызовы методов могут быть сделаны.

Прав ли я в этом? Есть ли что-то еще?

Кстати: есть ли инструмент, который может проверять библиотеку импорта? Если я это увижу, сомнений больше не будет.

11
задан mdennisa 26 August 2010 в 09:34
поделиться

2 ответа

Ваш обновленный метод является правильным, просто требуется такая настройка:

$('.selector').click(function(){
  var obj = $(this),
      repl = $('<div class="size">whats up man ??! <span class="medium"></span></div>');
  obj.replaceWith(repl);
  alert(repl.find('span').attr('class')); 
});

Вы можете проверить это здесь. Важным изменением является repl.find() для поиска нового элемента вместо старого.

10
ответ дан 3 December 2019 в 08:53
поделиться

почему вы хотите это сделать? вы знаете, на что вы его заменили....

$(document).ready(function(){
    $('.selector').click(function(){
        var obj = $(this);
        var replacement = $('<div class="size">whats up man ??!</div>');
        obj.replaceWith(replacement);
        alert(replacement.html());
    });
});
3
ответ дан 3 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: