2014-01-17 6 views
2

Я бы хотел получить список используемых DLL-файлов из самого приложения. Моя цель - сравнить список с жестко запрограммированным, чтобы узнать, не вложена ли какая-либо DLL. Я не могу найти примеров в Google.Как получить список используемых DLL?

+1

Вы можете использовать Process Explorer (http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx). Он отображает все DLL как открытые файлы. – jpfollenius

ответ

9

Вы можете использовать PSAPI для этого. Необходимая функция: EnumProcessModules. Есть sample code on MSDN.

Основной альтернативой является библиотека Tool Help. Это происходит следующим образом:

  • Звоните CreateToolhelp32Snapshot.
  • Начать перечисление Module32First.
  • Неоднократно звоните Module32Next.
  • Когда вы закончите, вызовите CloseHandle, чтобы уничтожить моментальный снимок.

Лично я предпочитаю Инструмент Справка для этой задачи. Вот очень простой пример:

{$APPTYPE CONSOLE} 

uses 
    SysUtils, Windows, TlHelp32; 

var 
    Handle: THandle; 
    ModuleEntry: TModuleEntry32; 
begin 
    Handle := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, 0); 
    Win32Check(Handle <> INVALID_HANDLE_VALUE); 
    try 
    ModuleEntry.dwSize := Sizeof(ModuleEntry); 
    Win32Check(Module32First(Handle, ModuleEntry)); 
    repeat 
     Writeln(ModuleEntry.szModule); 
    until not Module32Next(Handle, ModuleEntry); 
    finally 
    CloseHandle(Handle); 
    end; 
    Readln; 
end. 
+1

Я думаю, что это должно быть 'Win32Check (Handle <> INVALID_HANDLE_VALUE);' вместо 'Win32Check (Handle <> 0);' – forsajt

+0

@forsajt Большое спасибо. Ты прав. Я редактировал. –

0

Если вы хотите непрограммное решения, просто запустите приложение под Dependency Walker.

Он будет не только показывать статические зависимости, но также будет отслеживать и отслеживать динамическую загрузку модулей во время выполнения и сообщать вам, какой модуль называется LoadLibrary.

+0

@FreeConsulting AFAIR tdump не отслеживает ваш exe для динамических нагрузок, он просто делает статику. Это изменилось? –

+1

Ах, извините, когда я вижу «Dependency Walker», я думаю о старшем средстве MS PSDK. –

1

Установите Джедай Code Library (http://jcl.sf.net)

Она располагает исключениями диалога, который включает в себя трассировку стеки, Windows/аппаратное обеспечение краткого и отчетность - список загруженных библиотек DLL и их версий. Вы можете копировать или вызывать эту часть, генерируя этот список, из него.

Смежные вопросы