国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

學(xué)習(xí)筆記,VB6語(yǔ)言腳本解釋器

2024-07-21 02:20:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
關(guān)鍵字: vb 腳本 作者:董含君



討論如何讓自己的應(yīng)用程序支持腳本

最初也是在csdn的blog上找的,但是我再次去找的時(shí)候發(fā)現(xiàn)已經(jīng)找不到了.在此對(duì)原作者的提示表示感謝

使用范圍,可以讓用戶開(kāi)發(fā)的時(shí)候使用腳本,用exe或者dll進(jìn)行接口開(kāi)發(fā)雖然功能強(qiáng)大,但是不方便,用腳本,或者大家熟知的腳本就方便多了.

方法1 :自己作編譯器 解釋器

方法2 :利用現(xiàn)有的解釋器,用腳本,省略編譯器

很明顯,第二種方法簡(jiǎn)單的多.問(wèn)題是現(xiàn)有的解釋器(我叫做腳本引擎)有什么,去哪里找,怎么支持...

python比較流行,可以用于游戲腳本引擎,但是我目前還不會(huì)用(畢竟,我不是上帝)

vba 就是office的vba,用vb6的語(yǔ)法,我選這個(gè).因?yàn)槲乙?jiàn)了vb就特別親切...

估計(jì)凱比用不上這項(xiàng)技術(shù)吧....

最關(guān)鍵的就是找到這個(gè)傳說(shuō)中的vba6.dll 他來(lái)負(fù)責(zé)解釋

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聲明,顧名思義,就是執(zhí)行一行

第一個(gè)參數(shù),指向命令行字符串的指針

剩下的參數(shù)不知道作甚么用的......

用的時(shí)候:

封裝一下這樣用起來(lái)方便
function stepline(byval cmd as string) as long 'cmd就是vb6代碼
dim l as long '臨時(shí)變量,意義不大
l = ebexecuteline(strptr(byval cmd), 0, 0, 0) '這就是實(shí)質(zhì),簡(jiǎn)單吧
debug.print cstr(l) + ":" + cmd '調(diào)試用的,無(wú)意義

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,甚至可以逐行進(jìn)行(當(dāng)然,有興趣你可以自己做調(diào)試器)
if list1.listcount = 0 then
msgbox "沒(méi)有代碼"
else
list1.listindex = 0
dim i as long
for i = 0 to list1.listcount - 1
stepline list1.list(i)
next
end if

當(dāng)然,直接執(zhí)行文本也是可以的
假定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

簡(jiǎn)單吧

而且這些完全是面向?qū)ο蟮?br>
你的程序就相當(dāng)于虛擬機(jī),vba6.dll就是解釋器

腳本可以做什么!!連api跟com都可以用

如果你的虛擬機(jī)支持(就是程序提供現(xiàn)有的對(duì)象),他可以直接用(也稱為api,不過(guò)是你提供的,不是windows提供的而已)

給出幾個(gè)實(shí)例腳本(以下是過(guò)程,自動(dòng)填充到text1)

private sub command4_click()
text1.text = "'例子 vb6語(yǔ)法"
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 = "'例子 真的是面向?qū)ο蟮?更改新的標(biāo)題"
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 = "'例子 運(yùn)行應(yīng)用程序,并且發(fā)送按鍵!!"
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




收集最實(shí)用的網(wǎng)頁(yè)特效代碼!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安龙县| 翁源县| 新绛县| 兰溪市| 永清县| 安远县| 太保市| 鲁甸县| 泰州市| 临桂县| 旬阳县| 青龙| 裕民县| 闻喜县| 临朐县| 蕲春县| 平阴县| 上犹县| 吴忠市| 隆回县| 玉田县| 筠连县| 榆树市| 修水县| 洱源县| 客服| 河津市| 鄂尔多斯市| 新和县| 绿春县| 南雄市| 滁州市| 石柱| 桂林市| 尚义县| 治多县| 沙雅县| 闻喜县| 甘南县| 绍兴市| 南和县|