分享
 
 
 

学习笔记:浅析VB6语言脚本解释器

王朝vb·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

最初也是在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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有