include windows.inc ;一些包含文件
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
quitdllstr db "你退出了DLL",0
titlestr db "vb+asm",0
str1 db "消息框一",0
str2 db "消息框二",0
.data?
dll_hInstance dd ?
.code
dllmain proc hInst:DWORD, reason:DWORD, reserved1:DWORD ;DLL的主程序
.if reason==DLL_PROCESS_ATTACH ;当DLL加载的时候
push hInst ;用堆栈操作的方式来保存DLL的句柄
pop dll_hInstance
.elseif reason==DLL_PROCESS_DETACH ;这个是当退出DLL的时候
invoke MessageBox,NULL,addr quitdllstr,addr titlestr,MB_OK ;显示一个消息框!告诉你已经退出了DLL
.endif
mov eax,TRUE ;这句是返回TRUE给EAX寄存器,让系统知道无论发生什么错误都加载DLL
ret
dllmain endp
msgbox1 proc ;给VB调用的子程序1
invoke MessageBox,NULL,addr str1,addr titlestr,MB_OK ;invoke是调用的意思!这不是汇编指令!只是伪指令!由编译器执行
ret
msgbox1 endp
msgbox2 proc ;给VB调用的子程序2
invoke MessageBox,NULL,addr str2,addr titlestr,MB_OK
ret
msgbox2 endp
end dllmain ;这里是说明dllmain是DLL的主程序(可以这么理解)
==================================================================================
第二步:建立一个文件名为:vbdll.def的文件,其内容为:
==================================================================================
LIBRARY vbdll
EXPORTS msgbox1
EXPORTS msgbox2
==================================================================================
这个文件只要用于说明DLL里面哪些子程序或函数可以被调用,也就是说哪些子程序或函数被定义为公共的(PUBLIC)
第一个关键字LIBRARY是说明DLL的名称,第二个关键字:EXPORTS是。。。(不用我说都知道了!~呵呵)
第三步:建立一个批处理文件,文件名为:makedll.bat,这个是用于编译DLL用的,其内容为:
==================================================================================
set include=c:\Masm32v8\include
set lib=c:\Masm32v8\lib
set path=c:\Masm32v8\Bin
ml -c -coff vbdll.asm
link /dll /SUBSYSTEM:WINDOWS /def:vbdll.def vbdll.obj
==================================================================================
第四步:这步很简单,呵呵!大家都会做!用VB6新建一个标准的EXE,添加两个按钮(button)和一个模块,代码如下:
==================================================================================
'这是窗口代码
Private Sub Command1_Click()
msgbox1
End Sub
Private Sub Command2_Click()
msgbox2
End Sub
==================================================================================
'这是模块代码
Public Declare Function msgbox1 Lib "vbdll" ()
Public Declare Function msgbox2 Lib "vbdll" ()
==================================================================================
一切都搞掂了!~运行makedll.bat,如果没有错的话就会生成四个文件:vbdll.dll,vbdll.lib,vbdll.exp,vbdll.obj。将vbdll.dll文件复制到刚才建立
的VB源程序的目录(或者复制到系统目录也行),将VB源程序生成EXE文件,运行刚生成的EXE文件,按一下按钮,如果有消息框弹出的话那么VB+win32asm编程成功。YES。。。爽
例子代码:http://www.cc-365.com/lzq/vb+asm.rar
作者:懒虫
QQ:270909303
mail:lzq@cc-365.com