首页 > 开发 > 综合 > 正文

学习笔记,VB6语言脚本解释器

2024-07-21 02:20:39
字体:
来源:转载
供稿:网友
关键字: vb 脚本 作者:董含君



讨论如何让自己的应用程序支持脚本

最初也是在csdn的blog上找的,但是我再次去找的时候发现已经找不到了.在此对原作者的提示表示感谢

使用范围,可以让用户开发的时候使用脚本,用exe或者dll进行接口开发虽然功能强大,但是不方便,用脚本,或者大家熟知的脚本就方便多了.

方法1 :自己作编译器 解释器

方法2 :利用现有的解释器,用脚本,省略编译器

很明显,第二种方法简单的多.问题是现有的解释器(我叫做脚本引擎)有什么,去哪里找,怎么支持...

python比较流行,可以用于游戏脚本引擎,但是我目前还不会用(毕竟,我不是上帝)

vba 就是office的vba,用vb6的语法,我选这个.因为我见了vb就特别亲切...

估计凯比用不上这项技术吧....

最关键的就是找到这个传说中的vba6.dll 他来负责解释

private declare function ebexecuteline lib "vba6.dll" ( _
byval pstringtoexec as long, _
byval unknownn1 as long, _
byval unknownn2 as long, _
byval fcheckonly as long) as long

dll声明,顾名思义,就是执行一行

第一个参数,指向命令行字符串的指针

剩下的参数不知道作甚么用的......

用的时候:

封装一下这样用起来方便
function stepline(byval cmd as string) as long 'cmd就是vb6代码
dim l as long '临时变量,意义不大
l = ebexecuteline(strptr(byval cmd), 0, 0, 0) '这就是实质,简单吧
debug.print cstr(l) + ":" + cmd '调试用的,无意义

end function

你可以直接这么用
debug.print ebexecuteline(strptr("dim a as long,b as long,c as long"), 0, 0, 0)
debug.print ebexecuteline(strptr("a=" & 3), 0, 0, 0)
debug.print ebexecuteline(strptr("b=" & 5), 0, 0, 0)
debug.print ebexecuteline(strptr("c=" & 2), 0, 0, 0)
debug.print ebexecuteline(strptr("clipboard.settext (a+b)/c"), 0, 0, 0)
debug.print ebexecuteline(strptr("msgbox clipboard.gettext"), 0, 0, 0)

也可以
stepline "dim a as long,b as long,c as long"
stepline "a=" & 3
stepline "b=" & 5
stepline "c=" & 2
stepline "clipboard.settext (a+b)/c"
stepline "msgbox clipboard.gettext"

或者将文本放入listbox,甚至可以逐行进行(当然,有兴趣你可以自己做调试器)
if list1.listcount = 0 then
msgbox "没有代码"
else
list1.listindex = 0
dim i as long
for i = 0 to list1.listcount - 1
stepline list1.list(i)
next
end if

当然,直接执行文本也是可以的
假定text1.text是全部的代码

list1.clear
dim arr() as string
dim i as long
dim s as string
arr = split(text1.text, chr(13) + chr(10))
for i = 0 to ubound(arr())
stepline arr(i)
next

简单吧

而且这些完全是面向对象的

你的程序就相当于虚拟机,vba6.dll就是解释器

脚本可以做什么!!连api跟com都可以用

如果你的虚拟机支持(就是程序提供现有的对象),他可以直接用(也称为api,不过是你提供的,不是windows提供的而已)

给出几个实例脚本(以下是过程,自动填充到text1)

private sub command4_click()
text1.text = "'例子 vb6语法"
text1.text = text1.text + chr(13) + chr(10) + "dim a as long,b as long,c as long"
text1.text = text1.text + chr(13) + chr(10) + "a=" & 3
text1.text = text1.text + chr(13) + chr(10) + "b=" & 5
text1.text = text1.text + chr(13) + chr(10) + "c=" & 2
text1.text = text1.text + chr(13) + chr(10) + "clipboard.settext (a+b)/c"
text1.text = text1.text + chr(13) + chr(10) + "msgbox clipboard.gettext"
end sub

private sub command5_click()
text1.text = "'例子 真的是面向对象的,更改新的标题"
text1.text = text1.text + chr(13) + chr(10) + "dim f as form1"
text1.text = text1.text + chr(13) + chr(10) + "set f = new form1"
text1.text = text1.text + chr(13) + chr(10) + "f.show"
text1.text = text1.text + chr(13) + chr(10) + "f.caption=""aaaa"" "
end sub

private sub command6_click()
text1.text = "'例子 运行应用程序,并且发送按键!!"
text1.text = text1.text + chr(13) + chr(10) + "shell ""notepad.exe c:/example.txt"",vbnormalfocus "
text1.text = text1.text + chr(13) + chr(10) + "sendkeys ""hello world!"" "

end sub




收集最实用的网页特效代码!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表