Просмотров: 3111 | Дата: 19.04.2024 | Коментарии (0)

PureDLLHelper




На сайте http://www.realsource.de/ есть интересный инструмент, который помогает работать с любыми DLL.
Есть две версии для х64 и х86 систем соответственно PureDLLHelper_x64.exe и PureDLLHelper_x86.exe.
Утилита проста в эксплуатации. Загружаем подопытную DLL ку и сразу мгновенно видим все функции и кол-во параметров, с которыми эти функции можно вызывать.
Чудес конечно эта утилита не творит - какие это параметры и их типы она конечно не подскажет, но есть бонус! Она генерирует код на Пурике, который помогает работать с этой DLL при помощи прототипов. В общем, практически всё делает за вас.

На примере известной DLL user32.dll



Загружаем в утилиту, она сразу находит 732 функции. Ну мы с генерируем всем известные и любимые MessageBoxA и MessageBoxW Отмечаем их галочкой( предварительно убрав все лишние галочки при помощи самой верхней кнопки) и переходим на следующую вкладку Preview и получаем готовый код:

;========================================================================== 
; Generated with PureDLLHelper, Copyright ©2011 by Thomas  Schulz 
;========================================================================== 

Prototype MessageBoxA(a, b, c, d) 
Prototype MessageBoxW(a, b, c, d) 

Global MessageBoxA.MessageBoxA 
Global MessageBoxW.MessageBoxW 

Procedure.i user32_LoadDLL() 
 Protected hDLL.i 

 hDLL = OpenLibrary(#PB_Any, "user32.dll") 
 If hDLL <> 0 
 MessageBoxA = GetFunction(hDLL, "MessageBoxA") 
 MessageBoxW = GetFunction(hDLL, "MessageBoxW") 

 ProcedureReturn hDLL 
 EndIf 

 ProcedureReturn #False 
EndProcedure

Собственно, всё что нам осталось, это расставить нужные типы переменных и вызвать нужную функцию:

Prototype MessageBoxA(a, b.s, c.s, d) 
Prototype MessageBoxW(a, b.s, c.s, d) 
;..... 

If user32_LoadDLL() 
 MessageBoxA(0,"Vasja!","Hello",0) 
EndIf


На третьей вкладке можно посмотреть все ресурсы этой библиотеки. Программа так же работает и с обычными exe файлами ( в плане ресурсов естественно).
P.S. кто будет повторять код в режиме поддержки стиля XP, не забудте добавить вызов InitCommonControls_()

Скачать архив 

Материал взят с темы: Prototype (Прототипы)
Автор: kvitaliy










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.