亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于.NET的VBScript集成開(kāi)發(fā)環(huán)境的設(shè)計(jì)與實(shí)現(xiàn)

        2015-12-25 02:13:34
        關(guān)鍵詞:腳本單元格控件

        白 勇

        (重慶電力高等??茖W(xué)校,重慶 400053)

        近年來(lái),隨著計(jì)算機(jī)應(yīng)用越來(lái)越多地參與到經(jīng)濟(jì)建設(shè)和家庭生活當(dāng)中來(lái),對(duì)計(jì)算機(jī)軟件的需求也越來(lái)越大。社會(huì)不但需要大量的專業(yè)化定制軟件來(lái)滿足實(shí)際應(yīng)用的需求,同時(shí)對(duì)于軟件行業(yè)人員來(lái)講,集成開(kāi)發(fā)環(huán)境(IDE)的易用性、功能強(qiáng)大性和安全性,直接關(guān)系到軟件開(kāi)發(fā)的效率和質(zhì)量,因此,擁有高質(zhì)量的集成開(kāi)發(fā)環(huán)境是必須的。

        但是我們需要看到,在大型商業(yè)化集成開(kāi)發(fā)環(huán)境中,對(duì)腳本類語(yǔ)言的支持不足。有的雖然可以編輯和調(diào)試VBScript等腳本類語(yǔ)言,但并未提供與其他編譯運(yùn)行語(yǔ)言類似的代碼智能提示功能,甚至調(diào)試期間不能斷點(diǎn)執(zhí)行,也不能動(dòng)態(tài)地獲得變量值,這在網(wǎng)頁(yè)和COM類應(yīng)用中大量使用腳本語(yǔ)言的現(xiàn)狀下,令腳本語(yǔ)言開(kāi)發(fā)者感到十分不便。因此,我們需要一種專門針對(duì)于腳本語(yǔ)言的集成開(kāi)發(fā)環(huán)境。

        為解決這個(gè)問(wèn)題,本文提出了一種基于.NET的VBScript集成開(kāi)發(fā)環(huán)境的系統(tǒng)架構(gòu)及主要功能的設(shè)計(jì)思路,并使用.NET平臺(tái)的C#語(yǔ)言實(shí)現(xiàn)了該集成開(kāi)發(fā)環(huán)境。該課題具有十分重要的實(shí)際應(yīng)用價(jià)值和廣闊的市場(chǎng)前景。

        1 Microsoft Script Control 概述

        在現(xiàn)代互聯(lián)網(wǎng)和應(yīng)用程序中,腳本語(yǔ)言(Javascript,VBScript等)扮演著非常重要的角色,并被越來(lái)越多的程序員以及普通用戶認(rèn)識(shí)、掌握。腳本語(yǔ)言通過(guò)解釋器,邊解釋邊運(yùn)行,擁有大型編程語(yǔ)言(C++,C#,Java等)所不具有的方便靈活的特性,使用腳本語(yǔ)言進(jìn)行開(kāi)發(fā),一方面可以最大限度地?cái)U(kuò)展程序的應(yīng)用范圍,另一方面也方便程序員利用現(xiàn)有腳本提供的一些特別的功能(如正則表達(dá)式等),十分有用[1]。

        Microsoft Script Control控件是由美國(guó)微軟公司推出的一款可調(diào)試Javascript與VBScript腳本的控件,它內(nèi)建了完備的COM接口,包括IActiveScriptSite接口和IActiveScriptSiteWindow接口等,并針對(duì)Active Scripting功能提供了面向?qū)ο蠼涌冢?]。使用Microsoft Script Control控件,可以最大限度地利用資源,為腳本代碼提供成熟可靠的調(diào)試環(huán)境。

        Microsoft Script Control控件提供的主要接口有以下幾種[3-4]。

        (1)Language。該屬性可設(shè)置需要調(diào)試的腳本語(yǔ)言,包括Javascript和VBScript兩個(gè)枚舉值。

        (2)Timeout。該屬性可設(shè)置腳本引擎調(diào)試時(shí)的超時(shí)時(shí)間,單位是毫秒。當(dāng)某條腳本語(yǔ)句執(zhí)行時(shí)間超過(guò)該值時(shí),將觸發(fā)一個(gè)Timeout事件。設(shè)置為-1表示永不超時(shí)。

        (3)UseSafeSubset。這是一個(gè)布爾值,用于設(shè)置是否在安全模式下運(yùn)行腳本代碼。安全模式運(yùn)行時(shí)將進(jìn)行代碼檢查,不允許系統(tǒng)級(jí)腳本語(yǔ)句的執(zhí)行。設(shè)置為true時(shí)將在安全模式下運(yùn)行,設(shè)置為false時(shí)表示不在安全模式下運(yùn)行。

        (4)Error 該屬性返回一個(gè)Error類型的錯(cuò)誤對(duì)象,用于程序調(diào)試失敗時(shí)獲取錯(cuò)誤,該屬性為一個(gè)只讀屬性。

        (5)AddCode(string Code)。該方法允許使用者將腳本代碼添加至腳本引擎中去。被添加的腳本代碼將在稍后被執(zhí)行。

        (6)AddObject(string Name,object Object,[Bool AddMembers = False] )。該方法允許使用者添加外部的,非本腳本代碼所創(chuàng)建的對(duì)象至腳本引擎中,以便使用該對(duì)象的接口等。

        (7)Eval(string Expression)。該接口允許使用者對(duì)表達(dá)式求值。該表達(dá)式必須為一個(gè)值對(duì)象,比如返回結(jié)果為string,int,bool對(duì)象的表達(dá)式。而返回非值對(duì)象(例如返回一個(gè)Excel對(duì)象的表達(dá)式)則不可以使用該接口獲得其值。

        (8)ExecuteStatement(string Statement)。該接口允許使用者執(zhí)行腳本語(yǔ)句。

        (9)Reset()。該方法可以將腳本引擎的所有屬性設(shè)為默認(rèn)值,丟棄所有的對(duì)象和代碼,并將state屬性置為0。

        (10)Error。該事件在腳本執(zhí)行出錯(cuò)時(shí)被觸發(fā)。

        (11)TimeOut。該事件在腳本執(zhí)行超時(shí)被觸發(fā)。

        2 系統(tǒng)需求分析

        在VBScript集成開(kāi)發(fā)環(huán)境中,需要提供以下功能。

        文件操作功能:包括了項(xiàng)目文件的新建、打開(kāi)與保存,以及防止文件因未保存而丟失信息的自動(dòng)存檔功能。

        代碼編輯功能:包括了代碼的錄入、修改和刪除,復(fù)制、粘貼和剪切,操作的撤銷和重做,以及添加或刪除整行功能。

        調(diào)試功能:需要提供代碼調(diào)試的方法,包括整體調(diào)試、單步調(diào)試、繼續(xù)調(diào)試以及停止調(diào)試,同時(shí)還需要提供錯(cuò)誤信息提示和超時(shí)信息提示功能。對(duì)于錯(cuò)誤信息提示功能來(lái)說(shuō),需要根據(jù)不同的錯(cuò)誤,提示詳細(xì)的錯(cuò)誤信息。

        變量提取功能:包括了對(duì)用戶輸入代碼的變量檢測(cè)功能,將用戶代碼內(nèi)的變量均檢測(cè)到,同時(shí)還需提供判定變量類型的變量類型確定功能。最后,為了滿足調(diào)試過(guò)程中用戶對(duì)變量值的跟蹤,還需提供變量值的獲取功能。

        智能提示功能:包括了對(duì)用戶輸入的對(duì)象的接口提示,需要顯示該對(duì)象的所有方法和屬性,支持用戶通過(guò)鼠標(biāo)或者鍵盤來(lái)選取或者添加某個(gè)方法或?qū)傩?,同時(shí)當(dāng)用戶的輸入發(fā)生改變時(shí),該功能需要?jiǎng)討B(tài)更新提示信息以使之符合用戶的最新輸入。同時(shí)還包括了對(duì)用戶輸入的函數(shù)接口提示,當(dāng)用戶輸入一個(gè)函數(shù)名后,需要提示該函數(shù)的形參格式供用戶參考。

        其他功能:包括了對(duì)象和變量的瀏覽功能,以及通過(guò)拖拽對(duì)象或者變量,自動(dòng)生成代碼功能等。

        在上述功能中,調(diào)試功能和變量提取功能是關(guān)鍵功能。

        3 系統(tǒng)總體設(shè)計(jì)

        基于上面的分析可知,VBScript集成開(kāi)發(fā)環(huán)境需要提供文件操作、代碼編輯與調(diào)試、變量提取以及智能提示等功能。

        在文件操作模塊中,需要定義一種文件格式,用于持久化存儲(chǔ)用戶在集成開(kāi)發(fā)環(huán)境內(nèi)的編輯內(nèi)容。該文件選用XML格式。

        系統(tǒng)的總體架構(gòu)如圖1所示。

        圖1 系統(tǒng)總體架構(gòu)圖

        4 代碼調(diào)試

        調(diào)試功能是集成開(kāi)發(fā)環(huán)境所必不可少的功能,也是其核心功能之一。我們使用Microsoft Script Control控件來(lái)進(jìn)行代碼調(diào)試。在使用之前,需要先對(duì)控件進(jìn)行封裝。封裝后的接口如下:

        public static ScriptEngine(ScriptLanguage language,bool UseSafeSubset);

        這里主要封裝了代碼語(yǔ)言以及是否使用安全運(yùn)行模式這兩個(gè)參數(shù)。封裝后的方法使用了單例模式,當(dāng)?shù)谝淮握{(diào)用該接口時(shí),程序會(huì)新建一個(gè)Microsoft Script Control對(duì)象并對(duì)其屬性賦初值;當(dāng)重復(fù)調(diào)用該接口時(shí),程序會(huì)令原先的Microsoft Script Control對(duì)象執(zhí)行Reset()方法,并重新賦初值。這樣可以使得整個(gè)程序在運(yùn)行期間,只創(chuàng)建一個(gè)Microsoft Script Control對(duì)象,有效保證了一致性,并節(jié)省了系統(tǒng)資源。

        當(dāng)進(jìn)行調(diào)試時(shí),程序首先會(huì)脫離編輯狀態(tài),然后調(diào)用封裝的ScriptEngine方法來(lái)創(chuàng)建或重置Microsoft Script Control對(duì)象;然后程序?qū)⒁来巫x入每一個(gè)代碼單元格內(nèi)的代碼,使用AddObject接口將腳本代碼傳遞給調(diào)試引擎并執(zhí)行之。當(dāng)前一個(gè)單元格內(nèi)的代碼執(zhí)行完畢時(shí),后面一個(gè)單元格內(nèi)的代碼會(huì)被讀入并執(zhí)行;當(dāng)所有代碼單元格都被執(zhí)行過(guò)時(shí),此時(shí)調(diào)試完成,程序結(jié)束調(diào)試任務(wù);當(dāng)調(diào)試中出現(xiàn)錯(cuò)誤時(shí),調(diào)試會(huì)中止執(zhí)行。

        整體調(diào)試偽代碼如下:

        5 變量檢測(cè)與類型確定

        當(dāng)用戶離開(kāi)代碼編輯狀態(tài),或者改變單元格時(shí),變量探測(cè)器會(huì)啟動(dòng)。首先,它通過(guò)換行符將一個(gè)單元格內(nèi)的代碼分割成若干個(gè)語(yǔ)句,然后逐語(yǔ)句分析,當(dāng)該句由”Dim”,“Set”開(kāi)頭,含有等號(hào),或者是foreach循環(huán)語(yǔ)句時(shí),變量探測(cè)器會(huì)根據(jù)不同情況進(jìn)行具體分析,嘗試獲取變量,總體流程圖如圖2所示。

        當(dāng)變量探測(cè)器探測(cè)到變量后,將嘗試獲取該變量的值或類型。這是通過(guò)對(duì)等號(hào)右邊的語(yǔ)句進(jìn)行語(yǔ)法分析得到的[5-6],包括以下幾種情況。

        (1)右側(cè)為CreateObject語(yǔ)句。這種情況下,首先截取右側(cè)語(yǔ)句,獲取CreateObject語(yǔ)句傳入的參數(shù)。根據(jù)該參數(shù)的名稱,讀取相應(yīng)的類型定義文件,則該對(duì)象的Entrance元素的name屬性值即為該變量的類型。

        (2)右側(cè)為表達(dá)式。這種情況下,可以確定該變量為一個(gè)泛型變量,因此可以將其Value留空,待調(diào)試時(shí),通過(guò)調(diào)試控件的Eval方法來(lái)獲得該變量值。

        當(dāng)代碼識(shí)別出該變量為表達(dá)式后,還需要確定變量的類型。類型一共有4種:整型、浮點(diǎn)型、布爾型以及字符型。系統(tǒng)根據(jù)如下規(guī)則來(lái)確定變量類型:

        若表達(dá)式中有雙引號(hào),則該變量為字符型;

        若表達(dá)式為”true”或者”false”,則該變量為布爾型;

        若表達(dá)式中含有點(diǎn)號(hào),則該變量為浮點(diǎn)型;

        否則,該變量為整型。

        圖2 變量探測(cè)與類型確定流程圖

        (3)右側(cè)為變量。此時(shí)左側(cè)與右側(cè)變量類型相同,將右側(cè)變量類型賦給左側(cè)變量即可。

        (4)右側(cè)為變量的子方法或子屬性。這種情況下,需要先獲得右側(cè)變量的類型,然后在該對(duì)象的類型定義文件中,以右側(cè)變量的類型為入口,逐級(jí)查找方法或?qū)傩缘姆祷刂?,最終確定左側(cè)變量的類型。例如,有如下語(yǔ)句:

        Set worksheets1 = xlsName1.Workbooks.Add.Sheets

        則判定步驟如下:首先通過(guò)前面的語(yǔ)法分析,得知右側(cè)變量的類型為Excel Application;然后打開(kāi)文件,先查詢Entrance元素,然后跳轉(zhuǎn)到ApplicationClass元素;接著在ApplicationClass元素中搜索Workbooks屬性,得知其返回類型為Workbooks;這時(shí)跳轉(zhuǎn)到Workbooks元素,查找到Add方法的返回值為Workbook;最后跳轉(zhuǎn)至Workbook元素,判定其Sheets屬性返回值為Worksheets。則最終可確定worksheets1的類型為Worksheets。

        6 變量值的獲取

        在上一小節(jié)中,我們討論了系統(tǒng)如何探測(cè)到變量,以及變量類型的確定。而對(duì)于基本數(shù)據(jù)類型來(lái)說(shuō),其值的獲取與顯示,對(duì)于調(diào)試程序也擁有重要意義,本小節(jié)討論基本數(shù)據(jù)類型值的獲取。

        在變量探測(cè)器探測(cè)到變量并確定類型后,它會(huì)將變量存入一個(gè)Dictionary中,格式如下 :

        Dictionary> variables>

        其中l(wèi)ineIndex存儲(chǔ)了單元格的行號(hào),而后面的Vector則存儲(chǔ)了該單元格內(nèi)代碼的變量信息。當(dāng)用戶調(diào)試程序時(shí),每當(dāng)一個(gè)單元格的代碼成功執(zhí)行,系統(tǒng)會(huì)去該Dictionary中讀取該行的變量列表。對(duì)于列表中的每一個(gè)變量,若其類型為基本數(shù)據(jù)類型,則會(huì)通過(guò)Microsoft Script Control控件提供的Eval方法來(lái)獲取其變量值,方法如下:

        object obj = scriptEngine.Eval(varName);

        執(zhí)行該方法后,變量varName的值會(huì)被存儲(chǔ)至obj對(duì)象中。至此,我們已獲得了該變量的值,然后將其更新至變量列表即可。

        系統(tǒng)最終實(shí)現(xiàn)的界面如圖3所示。

        圖3 系統(tǒng)界面圖

        系統(tǒng)界面的最上方為標(biāo)題欄,接下來(lái)為菜單欄和工具欄。下方的主要部分為代碼編輯區(qū),右側(cè)為對(duì)象瀏覽器和變量瀏覽器,彈出的窗體為智能提示窗體。

        最終實(shí)現(xiàn)的系統(tǒng)可以對(duì)VBScript代碼提供編輯、調(diào)試、保存和導(dǎo)出功能,整個(gè)系統(tǒng)魯棒性佳,具有重要的實(shí)用價(jià)值。

        7 結(jié)論

        本文首先對(duì)相關(guān)技術(shù)和理論進(jìn)行了介紹,然后提出了一種基于.NET的VBScript集成開(kāi)發(fā)環(huán)境的系統(tǒng)架構(gòu)和主要功能的設(shè)計(jì)思路,并給出實(shí)現(xiàn)方案。該系統(tǒng)彌補(bǔ)了現(xiàn)有集成開(kāi)發(fā)環(huán)境對(duì)腳本語(yǔ)言支持的不足,具有重要的現(xiàn)實(shí)意義和廣闊的市場(chǎng)前景。

        [1] 陳立平,劉媛杰,王志勇.結(jié)合Script Control組件實(shí)現(xiàn)GIS應(yīng)用的二次開(kāi)發(fā)功能[J] . 塔里木大學(xué)學(xué)報(bào),2007,(2):43-44,59.

        [2] 劉日仙,袁利永. Script Control在VB自動(dòng)閱卷系統(tǒng)中的應(yīng)用[J] .計(jì)算機(jī)時(shí)代,2010,(9): 45-47.

        [3] Zhao Jialing,Jiao Weifeng,Sheng Wenwen . Examination system based on script engine technology[C] //2009 International Conference on Computational Intelligence and Natural Computing.Wuhan:IEEE,2009.

        [4] Yuan NH, Xue YX, Gao A. Interactive distant skill training based on remote control technology[C] // Proceedings of the 2007 1st International Symposium on Information Technologies and Applications in Education. Kunming : IEEE,2007.

        [5] 范忠鋒,劉堅(jiān).用詞/語(yǔ)法分析器生成器實(shí)現(xiàn)軟件系統(tǒng)的輸入[J] .計(jì)算機(jī)應(yīng)用. 2002,(1): 39-41.

        [6] 溫敬和.LR分析法在詞法分析器自動(dòng)構(gòu)造中的應(yīng)用[J] .計(jì)算機(jī)工程,2001,(7): 188-190.

        猜你喜歡
        腳本單元格控件
        酒駕
        安奇奇與小cool 龍(第二回)
        玩轉(zhuǎn)方格
        玩轉(zhuǎn)方格
        數(shù)據(jù)庫(kù)系統(tǒng)shell腳本應(yīng)用
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        淺談Excel中常見(jiàn)統(tǒng)計(jì)個(gè)數(shù)函數(shù)的用法
        西部皮革(2018年6期)2018-05-07 06:41:07
        快樂(lè)假期
        就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        在PowerBuUder中利用WinSock控件制作簡(jiǎn)單的Web服務(wù)器
        国产一区二区av在线观看| 麻豆久久久9性大片| 国模少妇一区二区三区| 2021年最新久久久视精品爱| 亚洲av国产大片在线观看| 久久一区二区视频在线观看 | 国产精品对白一区二区三区| 国产夫妇肉麻对白| 日日噜噜噜夜夜爽爽狠狠视频| 亚洲VA不卡一区| 91在线视频视频在线| 日本按摩偷拍在线观看| 五月av综合av国产av| 国精品无码一区二区三区在线| 日批视频免费在线观看| 成av人片一区二区三区久久| 国产精品国产三级国产专区不| 国产精品国产精品国产专区不卡| 国产乱妇乱子在线播视频播放网站| 国产丝袜一区二区三区在线不卡| 中文字幕一区二区va| 极品一区二区在线视频| 亚洲精品成人网站在线播放| 久久久久国产精品熟女影院| 无码国产日韩精品一区二区| 色偷偷亚洲精品一区二区| 日韩午夜理论免费tv影院| 欧美大成色www永久网站婷| 亚洲自拍另类欧美综合| 国产精品99久久精品女同| 国产一区二区三区在线视频观看| 男人扒开添女人下部免费视频| 男女性高爱潮免费观看| 无码人妻丰满熟妇区免费| 久久国产精品美女厕所尿尿av| 吃奶摸下高潮60分钟免费视频| 99精品国产99久久久久久97 | 中文字幕国产91| 精品国产97av一区二区三区| av色一区二区三区精品| 99视频30精品视频在线观看|