Уроки Iczelion'а


         

и передаем имя желаемой DLL.


.386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc
include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib
.data LibName db "DLLSkeleton.dll",0 FunctionName db "TestHello",0 DllNotFound db "Cannot load library",0 AppName db "Load Library",0 FunctionNotFound db "TestHello function not found",0
.data? hLib dd ? ; хэндл библиотеки (DLL) TestHelloAddr dd ? ; адрес функции TestHello
.code start: invoke LoadLibrary,addr LibName
;------------------------------------------------------------------------------- ; Вызываем LoadLibrary и передаем имя желаемой DLL. Если вызов проходит успешно, ; будет возвращен хэндл библиотеки (DLL). Если нет, то будет возвращен NULL. ; Вы можете передать хэндл библиотеки функции GetрrocAddress или любой другой ; функции, которая требует его в качестве одного из параметров. ;-------------------------------------------------------------------------------
.if eax==NULL invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK
.else
mov hLib,eax invoke GetprocAddress,hLib,addr FunctionName
;------------------------------------------------------------------------------ ; Когда вы получаете хэндл библиотеки, вы передаете его GetрrocAddress вместе ; с именем функции в этой dll, которую вы хотите вызвать. Она возвратит адрес ; функции, если вызов пройдет успешно. В противном случае, она возвратит NULL. ; Адреса функций не изменятся, пока вы не перезагрузите библиотеку. Поэтому ; их можно поместить в глобальные переменные для будущего использования. ;------------------------------------------------------------------------------
.if eax==NULL invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK .else
mov TestHelloAddr,eax call [TestHelloAddr]
;---------------------------------------------------------------------------- ; Затем мы вызываем функцию с помощью call и переменной, содержащей адрес ; функции в качестве операнда. ;----------------------------------------------------------------------------
.endif
invoke FreeLibrary,hLib
;------------------------------------------------------------------------------ ; Когда вам больше не требуется библиотека, выгрузте ее с помощью FreeLibrary. ;------------------------------------------------------------------------------
.endif invoke Exitprocess,NULL end start
Как вы можете видеть, использование LoadLibrary чуть сложнее, но гораздо гибче.
[C] Iczelion, пер. Aquila.

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий