• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    通過腳本程序訪問宿主程序的方法及其系統和裝置制造方法及圖紙

    技術編號:2912703 閱讀:153 留言:0更新日期:2012-04-11 18:40
    本發明專利技術公開了一種通過腳本程序訪問宿主程序的方法及其系統和裝置,本發明專利技術方法包括:為宿主程序中的共享類創建對應的共享類適配器;當執行腳本程序中訪問宿主程序的共享類的語句時,調用與所述共享類對應的共享類適配器,并通過所述共享類適配器訪問對應的共享類。采用本發明專利技術,可解除虛擬機與共享類的緊耦合,提高虛擬機的可重用性,進而提高訪問共享類的靈活性,簡化代碼維護工作。

    【技術實現步驟摘要】

    本專利技術涉及通信領域的計算機技術,尤其涉及一種通過腳本程序訪問宿主程序的方法及其系統,以及預編譯器。
    技術介紹
    隨著市場競爭的加劇和軟件技術的發展,客戶對應用系統的靈活性提出了很高的要求,要求能夠在不修改程序的情況下,通過調整系統參數、修改業務腳本的方式,迅速適應市場的變化,實現新的業務需求。在應用系統中嵌入業務腳本語言編譯器是目前常用的加強系統靈活性的方法,圖1給出了嵌入業務腳本語言編譯器的應用程序總體結構示意圖。圖1中的業務腳本編譯器和虛擬機,與應用程序編譯在同一進程內,應用程序中包含了業務腳本語言的編譯和執行環境,應用程序成為業務腳本程序的宿主程序。業務腳本編譯器負責將業務腳本程序代碼編譯成某種中間代碼(如三地址碼);虛擬機是業務腳本的執行環境,能夠執行由腳本編譯器生成的中間代碼;共享類和私有類都是由在應用程序中用原生編程語言(如:C++語言)實現的領域類,對業務腳本程序而言,共享類和私有類都是宿主程序中的類。共享類是指能夠在業務腳本程序中直接訪問的類,私有類是不能在業務腳本程序中直接訪問的類。業務腳本程序在應用程序中被處理和執行的過程可如圖2所示。從圖2可以看出,業務腳本程序代碼通過與腳本編譯器編譯為中間代碼,中間代碼在虛擬機中執行,虛擬機在執行過程中需要根據預先定義的共享類代碼創建相應的共享類對象,并調用共享類對象提供的方法。在實際應用中,通常會將系統中最容易發生變化的業務邏輯采用業務腳本-->來描述。在業務腳本中,借助腳本語言豐富的表達能力,通過對共享類的操作,實現復雜的業務邏輯。在業務邏輯發生變化的情況下,只要不是必須修改宿主程序中的類,通常只需要修改業務腳本就可以實現新的業務邏輯。圖3是一個通過業務腳本程序訪問宿主程序中的共享類來實現復雜的業務邏輯的例子。圖3中的業務腳本中分別創建了共享類_A、共享類_B和共享類_C的實例化對象:對象_A、對象_B和對象_C,并通過業務腳本分別調用了對象_A的方法_X,對象_C的方法_Z等各種方法。在執行所調用的共享類的方法的過程中,將有可能調用其它一些共享類或私有類的方法。如圖3所示,執行共享類_A的方法X過程中,將調用共享類_B的方法,共享類_B的方法將調用私有類_A的方法;執行共享類_B的方法W過程中,將調用私有類_A的方法。通過對共享類的各種方法的組合調用,可以完成復雜的業務邏輯。在上述方案中,建立一條方便的在業務腳本語言中訪問共享類的途徑是影響業務腳本語言表達能力的關鍵。如果在業務腳本中能夠訪問的共享類比較少,則業務腳本的表達能力弱,如果業務腳本中能夠訪問宿主程序中的所有關鍵領域類,則業務腳本的表達能力很強,系統整體的靈活性很高。由于業務腳本最終將被編譯成中間代碼,而中間代碼是在虛擬機上執行的,因此,在業務腳本中訪問共享類,本質上是通過虛擬機訪問共享類。在虛擬機中硬編碼對共享類的訪問,即,在虛擬機中直接訪問共享類,是目前一種常見的實現方案。例如,以下為一段業務腳本代碼:1int?iParam=1;//定義整型參數iParam2String?sParam="test";//定義字符型參數sParam3int?iResult;//定義整型參數iResult4ShareClass?obj=new?ShareClass();//實例化共享類ShareClass的對象obj,其中ShareClass為共享類的類名5iResult=obj.Fun(iParam,sParam);//調用共享對象obj的函數Fun,其中-->Fun為ShareClass中的函數名經過腳本編譯器編譯后,得到中間代碼序列。業務腳本中實例化共享對象的操作被編譯成CREATE指令,函數調用被編譯成一系列的動作:將函數的各個參數壓棧,將共享對象的地址壓棧,調用CALL指令。以下為業務腳本第4、5條腳本代碼對應的中間代碼,其中,第4條腳本代碼對應以下第1、2、3、4條中間代碼,第5行腳本代碼對應以下第5、6、7、8、9、10條中間代碼:1CREATE?ShareClass//創建ShareClass對象,并將創建的對象壓棧2POP?//將棧頂彈出,彈出的指針保存到寄存器REG_A中3ALLOC?obj_addr//申請一塊內存空間,其地址表示為obj_addr4MOV?REG_Aobj_addr//將REG_A中的內容復制到obj_add5PUSH?iParam_addr//將第一個參數iParam的地址壓棧6PUSH?sParam_addr//將第二個參數sParam的地址壓棧7PUSH?obj_addr//將參與函數調用的對象obj的地址壓棧8CALL?ShareClass?Fun//調用ShareClass的函數Fun,函數返回值地址將壓棧9POP?//將棧頂彈出,彈出的指針保存到寄存器REG_A中10MOV?REG_AiResult_addr//將REG_A中的內容復制到iResult_add當虛擬機執行CREATE指令時,先檢查指令的第一個操作數ShareClass,這個操作數是待實例化的類名,虛擬機通過這個類名找到對應的共享類,調用共享類的構造函數,并將新創建的共享對象的指針壓棧保存;當虛擬機執行CALL指令時,先檢查指令的第一個操作數ShareClass,這個操作數是類名,虛擬機通過類名找到其對應的共享類,然后檢查指令的第二個操作數Fun,這個操作數是函數名,虛擬機通過函數名找到共享類對應的函數,然后依次從調用棧中彈出共享對象的指針,以及函數各參數的指針,用這些參數調用相應共享對象的相應函數。從上面的例子中可以看出,虛擬機中硬編碼了對所有共享類的訪問代碼,-->隨著共享類的增多,將造成虛擬機異常臃腫,虛擬機的代碼量大,因而容易出錯。另外,虛擬機與共享類之間存在不恰當的耦合,虛擬機是應用框架中的一部分,應該是高度可重用的,而共享類屬于業務范疇,二者之間的強耦合將會降低虛擬機的可重用性,一旦共享類中的函數原型有變化,需要同步修改虛擬機的代碼。在實際應用中,共享類的修改是比較頻繁的,在目前的這種方案下,由于需要同步修改虛擬機代碼,代碼維護的工作量較大。
    技術實現思路
    本專利技術的實施例揭示了一種通過腳本程序訪問宿主程序的方法及其系統和裝置,以解除虛擬機與宿主程序共享類的緊耦合關系。本專利技術實施例揭示的通過腳本程序訪問宿主程序的方法,包括步驟:為宿主程序中的共享類創建對應的共享類適配器;當執行腳本程序中訪問宿主程序的共享類的語句時,調用與所述共享類對應的共享類適配器,并通過所述共享類適配器訪問對應的共享類。本專利技術實施例揭示的通過腳本程序訪問宿主程序的實現系統,包括:共享類適配器創建模塊,用于為宿主程序中的共享類創建共享類適配器;腳本執行模塊,用于根據腳本程序中訪問宿主程序的共享類的語句,調用與所述共享類對應的共享類適配器,并通過所述共享類適配器訪問對應的共享類。本專利技術實施例揭示的預編譯器,包括:文件分析模塊,用于分析共享類的頭文件,并得到共享類的結構;代碼生成模塊,用于根據所述文件分析模塊得到的共享類的結構,并根據共享類的結構生成所述共享類對應的共享類適配器。本專利技術的上述實施例,通過為宿主程序中的共享類創建對應的共享本文檔來自技高網
    ...

    【技術保護點】
    一種通過腳本程序訪問宿主程序的方法,其特征在于,包括: 為宿主程序中的共享類創建對應的共享類適配器; 當執行腳本程序中訪問宿主程序的共享類的語句時,調用與所述共享類對應的共享類適配器,并通過所述共享類適配器訪問對應的共享類。

    【技術特征摘要】
    1、一種通過腳本程序訪問宿主程序的方法,其特征在于,包括:為宿主程序中的共享類創建對應的共享類適配器;當執行腳本程序中訪問宿主程序的共享類的語句時,調用與所述共享類對應的共享類適配器,并通過所述共享類適配器訪問對應的共享類。2、如權利要求1所述的方法,其特征在于,所述共享類適配器包括對象創建接口模塊和方法調用接口模塊;所述通過共享類適配器訪問對應的共享類,具體為:當執行所述腳本程序中創建共享類的共享對象的語句時,調用與所述共享類對應的共享類適配器的對象創建接口模塊,并通過該接口模塊調用所述共享類中的構造函數,生成所述共享類的共享對象;當執行所述腳本程序中調用共享類的方法的語句時,調用與所述共享類對應的共享類適配器的方法調用接口模塊,并通過該接口模塊調用所述共享類中的相應方法函數。3、如權利要求2所述的方法,其特征在于,所述調用與共享類對應的共享類適配器的對象創建接口模塊,并通過該接口模塊調用所述共享類中的構造函數的過程,具體為:根據共享類的類名實例化對應的共享類適配器,得到與所述共享類對應的共享類適配器對象;調用所述共享類適配器對象的對象創建接口模塊;所述對象創建接口模塊調用所述共享類中的構造函數。4、如權利要求2所述的方法,其特征在于,所述調用與共享類對應的共享類適配器的方法調用接口模塊,并通過該接口模塊調用所述共享類中的相應方法函數的過程,具體為:根據共享類的類名實例化對應的共享類適配器,得到與所述共享類對應的共享類適配器對象;調用所述共享類適配器對象的方法調用接口模塊;所述方法調用接口模塊根據所述腳本程序中指示調用的方法函數名稱,調用所述共享類中的相應方法函數。5、如權利要求1所述的方法,其特征在于,當執行腳本程序中訪問宿主程序的共享類的語句時,包括步驟:將所述腳本程序編譯為中間代碼;執行所述中間代碼,并在執行過程中,調用與所述共享類對應的共享類適配器,通過所述共享類適配器訪問對應的共享類。6、如權利要求1所述的方法,其特征在于,所述為宿主程序中的共享類創建對應的共享類適配器,具體為:通過預編譯器,根據共享類的頭文件得到共享類的結構,并根據共享類的結構生成共享類適配器的源代碼。7、如權利要求6所述的方法,其特征在于,所述通過預編譯器,根據共享類的頭文件得到共享類的結構,具體為:通過預編譯器,根據共享...

    【專利技術屬性】
    技術研發人員:楊鋒鏑
    申請(專利權)人:華為軟件技術有限公司
    類型:發明
    國別省市:84[中國|南京]

    網友詢問留言 已有0條評論
    • 還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。

    1
    相關領域技術
    • 暫無相關專利
    主站蜘蛛池模板: 伊人久久一区二区三区无码| 久久午夜无码免费 | 无码av专区丝袜专区| (无码视频)在线观看| 亚洲AV无码精品色午夜果冻不卡| 影音先锋中文无码一区| 东京热加勒比无码视频| 人妻无码久久精品人妻| 亚洲精品无码专区在线在线播放| 亚洲GV天堂无码男同在线观看| 亚洲国产精品无码久久久秋霞2 | 国产丝袜无码一区二区视频| 久久久久亚洲AV成人无码| 国产精品无码不卡一区二区三区 | 中文字幕日产无码| 亚洲中文字幕无码爆乳AV| 亚洲AV综合色区无码一二三区| 在线播放无码高潮的视频| 西西4444www大胆无码| 国产精品无码一区二区在线| 无码精品尤物一区二区三区| 久久久久亚洲AV片无码下载蜜桃| 精品人体无码一区二区三区| 久久久g0g0午夜无码精品 | 亚洲成av人无码亚洲成av人| 无码精品黑人一区二区三区| 亚洲欧洲无码AV电影在线观看| AV无码精品一区二区三区宅噜噜| 国产精品白浆在线观看无码专区 | 精品无码一级毛片免费视频观看| 亚洲日韩一区二区一无码| 亚洲熟妇无码八V在线播放| 精品无码成人片一区二区98| 精品深夜AV无码一区二区 | 无码VA在线观看| 精品久久久无码人妻中文字幕豆芽 | 精品久久久久久无码国产| av无码a在线观看| 精品久久久无码中文字幕| 久久中文字幕无码专区| 免费看无码特级毛片|