电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

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


发布日期:2021/10/10
 

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

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

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

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

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

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

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

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

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

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

Private Declare Function EbExecuteLine Lib vbadll ( _

ByVal pStringToExec As Long _

ByVal Unknownn As Long _

ByVal Unknownn As Long _

ByVal fCheckOnly As Long) As Long

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

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

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

用的时候:

封装一下这样用起来方便

Function stepline(ByVal cmd As String) As Long cmd就是vb代码

Dim l As Long 临时变量意义不大

l = EbExecuteLine(StrPtr(ByVal cmd) ) 这就是实质简单吧

DebugPrint CStr(l) + : + cmd 调试用的无意义

End Function

你可以直接这么用

DebugPrint EbExecuteLine(StrPtr(dim a as longb as longc as long) )

DebugPrint EbExecuteLine(StrPtr(a= & ) )

DebugPrint EbExecuteLine(StrPtr(b= & ) )

DebugPrint EbExecuteLine(StrPtr(c= & ) )

DebugPrint EbExecuteLine(StrPtr(clipboardsettext (a+b)/c) )

DebugPrint EbExecuteLine(StrPtr(msgbox ClipboardGetText) )

也可以

stepline dim a as longb as longc as long

stepline a= &

stepline b= &

stepline c= &

stepline clipboardsettext (a+b)/c

stepline msgbox ClipboardGetText

或者将文本放入listbox甚至可以逐行进行(当然有兴趣你可以自己做调试器)

If ListListCount = Then

MsgBox 没有代码

Else

ListListIndex =

Dim i As Long

For i = To ListListCount

stepline ListList(i)

Next

End If

当然直接执行文本也是可以的

假定texttext是全部的代码

ListClear

Dim Arr() As String

Dim i As Long

Dim s As String

Arr = Split(TextText Chr() + Chr())

For i = To UBound(Arr())

stepline Arr(i)

Next

简单吧

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

你的程序就相当于虚拟机vbadll就是解释器

脚本可以做什么!!连API跟COM都可以用

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

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

Private Sub Command_Click()

TextText = 例子 VB语法

TextText = TextText + Chr() + Chr() + dim a as longb as longc as long

TextText = TextText + Chr() + Chr() + a= &

TextText = TextText + Chr() + Chr() + b= &

TextText = TextText + Chr() + Chr() + c= &

TextText = TextText + Chr() + Chr() + clipboardsettext (a+b)/c

TextText = TextText + Chr() + Chr() + msgbox ClipboardGetText

End Sub

Private Sub Command_Click()

TextText = 例子 真的是面向对象的更改新的标题

TextText = TextText + Chr() + Chr() + dim f as form

TextText = TextText + Chr() + Chr() + set f = new form

TextText = TextText + Chr() + Chr() + fshow

TextText = TextText + Chr() + Chr() + fcaption=aaaa

End Sub

Private Sub Command_Click()

TextText = 例子 运行应用程序并且发送按键!!

TextText = TextText + Chr() + Chr() + shell notepadexe c:\exampletxtvbnormalfocus

TextText = TextText + Chr() + Chr() + sendkeys Hello World!

End Sub

上一篇:订单号生成

下一篇:动态修改WCF客户端配置文件终结点的地址的几种方法