讓自己的程序支持腳本,尤其是支持JavaScript是件很有意思的事情的,下面是一個(gè)簡(jiǎn)單的Demo,通過(guò)google的V8引擎的來(lái)實(shí)現(xiàn)這個(gè)功能。
我們Demo的JavaScript代碼如下:
function draw(dc)
{
drawer.drawLine(dc, 0xFF, 5, 100, 100, 200, 200);
drawer.drawLine(dc, 0xFF0000, 10, 50, 50, 300, 200);
drawer.drawFrame(dc, 0x00FF00, 2, 350, 200, 500, 400);
drawer.fillRect(dc, 0xFF00FF, 50, 400, 150, 500);
}
最終會(huì)實(shí)現(xiàn)如下的效果:

可以看到窗口上畫什么東西,完全有腳本來(lái)控制。Chrome V8的編譯,設(shè)計(jì)和使用方法,不具體說(shuō)了,可以參考:
具體怎么實(shí)現(xiàn)的,可以參考源代碼。說(shuō)幾點(diǎn)需要注意的(1)因?yàn)槲覀冊(cè)诰幾gV8.dll時(shí)用的是Release版DLL方式的C/C++運(yùn)行庫(kù),所以我們的這個(gè)應(yīng)用程序工程也需要這樣設(shè)置。(2)我用Vs2008編譯,發(fā)現(xiàn)中文路徑下文件讀取會(huì)有問(wèn)題,具體原因可以參考http://blog.csdn.net/lyqchina/article/details/4214205(3)一定要調(diào)用Script.Run(),這樣我們才能在運(yùn)行環(huán)境成功取得腳本里Draw方法。我們上面的這個(gè)例子只是一個(gè)簡(jiǎn)單的Demo, 真正在商業(yè)軟件中運(yùn)用V8還有很多問(wèn)題要考慮。比如Demo中的JS代碼沒(méi)有考慮異常,失敗等情況。另外在C++函數(shù)和腳本的綁定方面用的都是V8的原始接口,不是很方便, 如果需要方便的綁定可以參考這個(gè)開(kāi)源項(xiàng)目http://code.google.com/p/cproxyv8/如果想用V8給自己的軟件提供腳本接口, 有個(gè)很好的開(kāi)源項(xiàng)目可以參考,就是Node.js, 地址http://nodejs.org/,該項(xiàng)目已經(jīng)成為通過(guò)JS開(kāi)發(fā)Web服務(wù)程序的平臺(tái),本質(zhì)上是也是通過(guò)V8封裝C++對(duì)象給JS腳本使用。現(xiàn)在我們已經(jīng)可以看到V8的強(qiáng)大, 理論上我們可以通過(guò)V8 封裝任何庫(kù)給JS使用,未來(lái)如果所有平臺(tái)的API都有庫(kù)給JS使用的話,我們就也可以用JS開(kāi)發(fā)應(yīng)用程序了,這時(shí)JS就是類似Java的一個(gè)平臺(tái)了。
源代碼下載:
Source Code
posted on 2012-05-19 11:59
Richard Wei 閱讀(15963)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
腳本