我們在VB5實現相同。
在我們的應用程序中,VB腳本用於自定義業務規則甚至UI。有一個合適的文件結構,例如基類位於base \文件夾中。
當VB應用程序運行時,我們使用MSScript控件來運行腳本。初始化步驟是加載VBS文件的名稱並在內存中創建一個關聯樹。然後,當VB需要調用某個腳本(例如CreateNewCustomer())時,會通知引擎它應該加載到MSScript 2文件中:CreateNewCustomer.vbs和base \ CreateNewCustomer.vbs在這種情況下,我們實現了一些讓我們在VBScript中使用繼承。
此外,對我們的COM類VBScriptEngine的引用也傳遞給了MSScript控件。 所以在任何VBScript中我們可以稱之爲VBScriptEngine.ExecuteScript(「CreateNewCustomer」,則params),並再次可以執行其他的VBScript
什麼是這個任務的挑戰是,我們不希望創建和初始化實例太多的MSScript控件,但MSScript控件無法在當前腳本未完成時執行其他腳本。所以在我們的VBScriptEngine中我們有腳本執行堆棧。如果任何VBScript需要調用另一個VBScript,我們需要創建一個新的MSScript控件並將其放入堆棧。有時我們有需要3個或更多MSScript控件同時嵌套的調用
是的所有這些現在看起來很奇怪,當時.NET中的動態語言或動態程序集可以用較少的努力獲得更好的結果。早在2006年
聽起來很整齊,聽起來很複雜也是如此。你可能已經處理的一件事是確保所有的路徑都是相對的,所以你可以移動裝載程序和不在附近的東西。 – JoshBerke 2009-06-30 18:07:26
乾杯喬希。我曾嘗試過,但是當腳本包含另一個腳本(使用.OpenTextFile)時,Wscript。包含腳本中的ScriptFullName將返回調用腳本的路徑,而不是調用腳本的路徑,因此除非相對於調用腳本,否則不可能相對調用任何內容,除非更改當前目錄,而我不想這樣做它可能會影響其他程序。 這聽起來很複雜,但實際上很簡單,並允許建立一個有用的庫 – FrinkTheBrave 2009-07-17 09:53:45