我们在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