游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5319|回复: 3

[正版原创]中秋礼物:用(VB+汇编)来写简单的程序

[复制链接]

2

主题

7

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2004-9-27 21:52:00 | 显示全部楼层 |阅读模式
    这篇文章是写给初学者的!希望能够对初学者以后的发展有所帮助!(如果你是高手那请你指正指正其中的错误!谢谢)
    VB简单易用,开发速度快,其功能也不错,但是有一些功能(例如:远程钩子,因为VB所编写的DLL不是标准DLL,必须要借用其它语言编写出来的标准DLL)如果只是单单用VB来开发,是极难实现的,而汇编语言可谓功能最强大(技术过关的话,什么问题都能解决),但是其开发速度慢,一个简单的东西都要写很多代码!如果把这两种语言合起来一齐编程可谓取长补短(用VB专写介面之类的,用汇编专写VB很难实现的或者是速度要求过高的东西),写出来的程序功能要多强有多强!呵呵!而且开发的速度也不会慢(相对于只用汇编来写速度肯定快)!
    这里我给大家介绍一个例子,做这个简单例子所使用的东西:VB6+MASM32V8(安装到c:\masm32v8)+记事本。
   
第一步:复制以下的代码到记事本里面(另存为文件名:vbdll.asm),这个就是DLL的ASM源程序。
==================================================================================
.386                ;让编译器知道我们是使用386的汇编指令
.model flat,stdcall ;使用内存平坦模式
option casemap:none ;代码里面的变量规则是:大写不等于小写

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 hInstWORD, 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
2004-09-27

2

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
QQ
发表于 2004-9-30 12:42:00 | 显示全部楼层

Re:[正版原创]中秋礼物:用(VB+汇编)来写简单的程序

利害!真正的高手!
感??侵鞯?o私!!

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-10-5 10:42:00 | 显示全部楼层

Re:[正版原创]中秋礼物:用(VB+汇编)来写简单的程序

建议还是使用VC++吧,做起这些来顺风顺水

7

主题

87

帖子

109

积分

注册会员

Rank: 2

积分
109
QQ
发表于 2006-11-30 13:18:00 | 显示全部楼层

Re:[正版原创]中秋礼物:用(VB+汇编)来写简单的程序

用C++就没有这种乐趣了,毕竟使用VB需要追求这种境界,学习VB也需要这种探索精神,今天上外国网站看了不少老外牛人的VB作品,很有感触。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 23:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表