.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
IDD_MAIN equ 1000
IDC_BTN1 equ 1001
IDC_BTN2 equ 1002
IDC_Text equ 1003
_PROCVAR0 typedef proto
PROCVAR0 typedef ptr _PROCVAR0
;函数指针
.data?
hInstance dd ?
hDll dd ?
lpProInc PROCVAR0 ?
lpProDec PROCVAR0 ?
szText db 1024 dup(?)
.const
szDll db 'demoDll.dll',0
szINC db '_incCounter',0
szDEC db '_decCounter',0
szFmt db 'eax值:%d',0
.code
;对话框过程
_ProcDlgMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
mov eax,uMsg
.if eax == WM_INITDIALOG
invoke LoadLibrary,offset szDll
mov hDll,eax
invoke GetProcAddress,hDll,offset szINC
mov lpProInc,eax
invoke GetProcAddress,hDll,offset szDEC
mov lpProDec,eax
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
invoke FreeLibrary,hDll
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDC_BTN1
invoke lpProInc
mov ebx,eax
invoke wsprintf,addr szText,addr szFmt,eax
invoke MessageBox,NULL,addr szText,NULL,MB_OK
invoke SetDlgItemInt,hWnd,IDC_Text,ebx,FALSE
.elseif ax == IDC_BTN2
invoke lpProDec
invoke SetDlgItemInt,hWnd,IDC_Text,eax,FALSE
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr _ProcDlgMain,NULL
;invoke GetModuleHandle,NULL
;invoke DialogBoxParam,eax,IDD_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
dll和其他代码 在另一篇里