讓自己的程序支持腳本,尤其是支持JavaScript是件很有意思的事情的,下面是一個(gè)簡單的Demo,通過google的V8引擎的來實(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)如下的效果:

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