End Class
该类包括一个命名为 m_Objects 的哈希表,它在该表中存储对可编写脚本对象的引用。
AddObject 方法使用对象的名称作为其关键字,向哈希表中添加一个新的对象。(这与脚本控件存储对象及相关名称的方式非常相似。)
虽然 GetCompiledState 子例程不是很有趣,但 GetEventSourceInstance 函数确实如此。如果脚本要捕获来自其中一个可编写脚本对象的事件,VSA 调用 GetEventSourceInstance 来获取对感兴趣对象的引用。例如,假设该脚本要为名为 btnExecute 的按钮定义一个 Click 事件处理程序。然后,VSA 使用 GetEventSourceInstance 函数来获取对名为 btnExecute 对象的引用。GetEventSourceInstance 只使用该名称在哈希表中查找并返回对象。
您的应用程序可以为操作脚本定义一个全局对象。正如 VSA 使用 GetEventSourceInstance 函数查找作为事件源的对象一样,它使用 GetGlobalInstance 函数检索对这些全局对象的引用。例如,ScriptDraw 程序在名为 ThePicture 的站点类中存储对其主 Picture 对象的引用。在该脚本调用 ThePicture.MakeSegment 时,VSA 使用 GetGlobalInstance 来获取对该对象的引用。与 GetEventSourceInstance 函数类似,GetGlobalInstance 只获取来自哈希表的对象并返回该对象。
下一个有趣的方法是 OnCompilerError,并且它比您想象的还要有趣得多。如果 VSA 编译脚本时出错,它就调用该方法,向它传递有关错误的信息。事实上,它传递许多有关错误的真正有用的信息。它为您提供错误描述、包含错误的行号、行文本以及该错误在行中的位置。
该版本的 OnCompilerError 在 RichTextBox(位于名为 dlgError 的窗体上)中显示错误消息和包含错误的行。它使用错误信息以红色高亮显示错误,因此,很容易就可以查明何处出错。这是对脚本控件的一个巨大的改进。通常,在人们被脚本控件弄模糊的时候,一提起它,就会想到某种模糊的东西,例如“对象不支持这种属性或方法”。
如果用户单击错误窗体的“Continue”按钮,错误对话框返回“OK”,而 OnCompilerError 返回 True,以通知 VSA 继续处理脚本。如果用户单击“Stop”,OnCompilerError 返回 False,以通知 VSA 停止处理脚本。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/