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

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

Когда я хочу использовать Win32 DLL, обычно я просто вызываю такие API, как LoadLibrary () и GetProcAdderss (). Но в последнее время я занимаюсь разработкой DirectX9, и мне нужно добавить файлы d3d9.lib , d3dx9.lib и т. д.

Я слышал достаточно того, что LIB предназначен для статического связывания, а DLL - для динамического связывания.

Итак, в настоящее время я понимаю, что LIB содержит реализацию методов и статически связан во время компоновки как часть окончательного EXE-файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE-файла.

Но иногда есть некоторые LIB-файлы , поставляемые с DLL-файлами, поэтому:

  • Что это за LIB файлы для?
  • Как они достигают того, для чего предназначены?
  • Существуют ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?

Обновление 1

После проверки Википедии я помню, что эти файлы LIB называются библиотека импорта . lib и т. д. Файлы.

Я слышал достаточно, что LIB для статического связывания, а DLL - для динамического связывания.

Так что в настоящее время я понимаю, что LIB содержит реализацию методов и статически связан по ссылке. время как часть окончательного EXE-файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE-файла.

Но иногда есть некоторые LIB-файлы , поставляемые с DLL-файлами, поэтому:

  • Что это за LIB файлы для?
  • Как они достигают того, для чего предназначены?
  • Существуют ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?

Обновление 1

После проверки Википедии я помню, что эти файлы LIB называются библиотека импорта . lib и т. д. Файлы.

Я слышал достаточно, что LIB для статического связывания, а DLL - для динамического связывания.

Так что в настоящее время я понимаю, что LIB содержит реализацию методов и статически связан по ссылке. время как часть окончательного EXE-файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE-файла.

Но иногда есть некоторые LIB-файлы , поставляемые с DLL-файлами, поэтому:

  • Что это за LIB файлы для?
  • Как они достигают того, для чего предназначены?
  • Существуют ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?

Обновление 1

После проверки Википедии я помню, что эти файлы LIB называются библиотека импорта .

Таким образом, в настоящее время я понимаю, что LIB содержит реализацию методов и статически связан во время компоновки как часть окончательного EXE-файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE-файла.

Но иногда есть некоторые LIB-файлы , поставляемые с DLL-файлами, поэтому:

  • Что это за LIB файлы для?
  • Как они достигают того, для чего предназначены?
  • Существуют ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?

Обновление 1

После проверки Википедии я помню, что эти файлы LIB называются библиотека импорта .

Таким образом, в настоящее время я понимаю, что LIB содержит реализацию методов и статически связан во время компоновки как часть окончательного EXE-файла. Хотя DLL динамически загружается во время выполнения и не является частью окончательного EXE-файла.

Но иногда есть некоторые LIB-файлы , поставляемые с DLL-файлами, поэтому:

  • Что это за LIB файлы для?
  • Как они достигают того, для чего предназначены?
  • Существуют ли какие-либо инструменты, которые позволяют мне проверять внутренности этих файлов LIB?

Обновление 1

После проверки Википедии я помню, что эти файлы LIB называются библиотека импорта . Но мне интересно, как это работает с моим основным приложением и динамически загружаемыми DLL.

Обновление 2

Как и сказал RBerteig, в файлах LIB есть некоторый код заглушки, созданный с помощью DLL. Таким образом, вызывающая последовательность должна быть такой:

Мое основное приложение -> заглушка в LIB -> настоящая целевая DLL

Итак, какую информацию следует содержать в этих LIB? Я мог бы подумать о следующем:

  • Файл LIB должен содержать полный путь соответствующей DLL; Таким образом, DLL может быть загружена во время выполнения.
  • Относительный адрес (или смещение файла?) Каждой точки входа каждого метода экспорта DLL должен быть закодирован в заглушке; Так что правильные переходы / вызовы методов могут быть сделаны.

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

Кстати: есть ли инструмент, который может проверять библиотеку импорта? Если я это увижу, сомнений больше не будет. NET MVC 2 и Razor В файле _Layout.cshtml у меня есть следующая запись: @ Html.Action ("LoadPagesStructure", "Page") Внутри класса PageController методы LoadPagesStructure выглядят следующим образом: [ChildActionOnly] / * этот атрибут ...

В файле _Layout.cshtml есть следующая запись:

@Html.Action("LoadPagesStructure", "Page")

Внутри класса PageController , методы LoadPagesStructure выглядят следующим образом:

[ChildActionOnly] /* this attribute indicates that an action should not 
                     be invoked as a result of a user request (by url) */
public ActionResult LoadPagesStructure()
{         
    ViewModel.Pages = new List() {"page1", "page2", "page3"};
    return View();
}

Наконец, мой Представление LoadPagesStructure.cshtml выглядит следующим образом:

@inherits System.Web.Mvc.WebViewPage

    @foreach (var page in View.Pages) {
  • @Html.ActionLink(page, "Index", "Home")
  • }

К сожалению, исключение выдается после выполнения:

System.InvalidOperationException: Child actions are not allowed to perform redirect actions.

Как можно динамически создавать ссылки на мои страницы?

PS: Я знаю что я могу сделать это следующим образом: @page . Тем не менее я думаю, что это не правильный путь, потому что здесь невозможно управлять маршрутизацией.

С уважением,

5
задан jwaliszko 27 November 2012 в 10:37
поделиться