Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Поиск функции в .dll библиотеке


Автор: MarkHunt 14.6.2013, 19:06
Здравствуйте! Заранее извиняюсь, если я ошибся разделом форума.
В общем у меня следующая проблема.
У меня есть некая dll библиотека, из которой мне нужно вызвать определённые функции. И мне нужно узнать точные названия этих функций и типы и кол-во параметров, которые нужно передать в них, ну и получить какой-то результат. Так вот, я почитал в интернете, что можно возпользоваться программой http://www.dependencywalker.com/, для того чтобы посмотреть какие функции имеются в dll файле. Но я не понял как пользоваться этой программой, чтобы найти то, что мне нужно.
Чтобы немного разобраться в программе, я для примера попробовал посмотреть файл user32.dll. Я точно знаю, что в этой библиотеке есть функция LockWorkStation, которая блокирует комп (её ещё можно вызвать клавишами Win + L). Ну, допустим я хочу найти эту функцию в библиотеке, узнать какие параметры в неё можно передавать, что она будет возвращать мне и т.д. И можно ли вообще сделать такое? В общем когда я открываю user32.dll с помощью этой программы, вижу такую картину. Но что делать дальше?
user posted image
Может быть есть кто-то, кто встречался с подобым или просто знает что-то из этой области? Заранее, благодарен за помощь.

Автор: feodorv 14.6.2013, 22:23
В программе два раза кликните мышкой по интересующей Вас функции, откроется браузер с соответствующей страницей англоязычной MSDN. Там и прочитаете про параметры вызова функции.
(Картинки не видно)))

Автор: MarkHunt 14.6.2013, 22:53
Цитата(feodorv @  14.6.2013,  22:23 Найти цитируемый пост)
Картинки не видно

Странно, конечно. Перезалил на другой хостинг, может сейчас будет видна.

Цитата(feodorv @  14.6.2013,  22:23 Найти цитируемый пост)
В программе два раза кликните мышкой по интересующей Вас функции, откроется браузер с соответствующей страницей англоязычной MSDN.

Что-то не нашёл, куда эт так кликать нужно.

Добавлено через 9 минут и 48 секунд
Кстати, вообще можно ли узнать как-то, какие функции есть в dll-ке и как их использовать, без справочника (с помощью той же программы например)? Или обязательно нужно иметь API к dll файлу?

Автор: feodorv 14.6.2013, 23:14
Цитата(MarkHunt @  14.6.2013,  23:53 Найти цитируемый пост)
Перезалил на другой хостинг, может сейчас будет видна.

Теперь видно)))


Цитата(MarkHunt @  14.6.2013,  23:53 Найти цитируемый пост)
Что-то не нашёл, куда эт так кликать нужно.

На панели справа, где список функций.


Цитата(MarkHunt @  14.6.2013,  23:53 Найти цитируемый пост)
Кстати, вообще можно ли узнать как-то, какие функции есть в dll-ке и как их использовать, без справочника (с помощью той же программы например)? 

Список экспортируемых и импортируемых функций (то есть их имена) доступен в dll. А вот параметры вызова, возвращаемое значение (в C) etc в dll не пишется (да и зачем???). Подобную информацию можно получить из .h файла.

Автор: MarkHunt 14.6.2013, 23:46
feodorv, спасибо. Наконец-таки разобрался где эти функции искать  smile Просто, у меня на картинке, справа два списка функций, и я сначала не понял в какой именно список смотреть. Оказывается надо было слева (в дереве объектов) выбрать именно user32.dll, тогда справа верхний список пропадёт, а останется только нижний. В нём то и будет список функций из user32.dll.

У меня ещё небольшой вопрос  smile 
Обязательно ли прилагается к .dll-файлу .h-файл, или .h-файл может и вовсе отсутствовать?

Автор: feodorv 15.6.2013, 01:41
Цитата(MarkHunt @  15.6.2013,  00:46 Найти цитируемый пост)
Обязательно ли прилагается к .dll-файлу .h-файл, или .h-файл может и вовсе отсутствовать? 

Нет, не обязательно. Вижу такие варианты:
  • библиотека является системной, тогда соответствующий .h файл прилагается к компилятору или является частью какого-либо DSK. Если в соответствующем .h файле не описана экспортируемая из dll функция (для Microsoft дело обычное), то тогда на помощь приходит интернет (впрочем, он всегда приходит на помощь, особенно в случае поиска примера применения искомой функции)
  • библиотека является плагином (как вариант - COM сервером), тогда .h файл (скорее всего) будет отсутствовать, так как соглашения о вызовах и параметрах задаётся самой программой, к которой эта dll идёт плагином
  • библиотека идёт в составе стороннего программного продукта, тогда всё зависит от разработчика (обычно смысла в предоставлении внутренней информации нет, соответственно, нет и .h файла)
  • библиотека предназначена для использования третьими лицами, вот тогда .h файл существенно необходим
В любом случае .h файл нужен только на этапе компиляции той или иной программы. Когда компиляция позади, .h уже не нужен.

Автор: MarkHunt 15.6.2013, 08:00
feodorv, большое спасибо, за толковое объяснение

Автор: xvr 16.6.2013, 12:01
Цитата(feodorv @  15.6.2013,  01:41 Найти цитируемый пост)
библиотека является плагином (как вариант - COM сервером),

Хочу добавить пару слов к этому варианту. 

Если библиотека является COM сервером, то в ней может присутствовать Type Library (а может и не присутствовать). Если она есть, то из нее можно извлечь практически полную информацию о классах и методах этой библиотеки. Попробуйте открыть вашу dll как Type Library в утилите OLE-COM Object Viewer (идет в составе MS VS и в MS SDK)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)