C语言实现COM脚本持久化与宏功能

需积分: 10 4 下载量 165 浏览量 更新于2024-09-11 收藏 118KB DOC 举报
本章内容主要讨论了如何在标准C语言中实现COM(Component Object Model)的高级特性,特别是关于脚本代码的持久化和交互。在之前的章节中,已经构建了一个基础的Activex脚本宿主,但现在我们将探索更深入的技术。 首先,脚本代码的持久化是关键点。在传统的脚本宿主功能中,脚本引擎会在每次运行时加载、分析和执行脚本,然后在执行完成后释放。为了使某些脚本能够在引擎中保持存在,即使未被立即执行,我们需要在`ParseScriptText`函数中使用`SCRIPTTEXT_ISPERSISTENT`标志。这个标志指示引擎应保留已解析的脚本内容,即使`ParseScriptText`函数返回后也不卸载。 其次,添加“宏”(即预先编译的脚本片段)时,必须确保IActiveScript对象在引擎处于INITIALIZED状态时添加,但在转换为STARTED或CONNECTED状态之前。这是因为如果在引擎运行过程中添加,那些宏可能会因为引擎状态的变化而被卸载。一个示例可以在ScriptHost7目录中的代码中看到,这里引入了一个VB脚本作为全局变量,并显式地设置了`SCRIPTTEXT_ISPERSISTENT`。 脚本中的特定函数调用和变量值的查询与设置也是重要的部分。通过使用接口,可以允许外部脚本或程序调用预先定义的宏中的函数,增强了脚本的可重用性和灵活性。同时,通过访问引擎内部存储的变量,开发者可以动态地查询和修改脚本环境中的值。 在脚本代码和“命名项”(Name Space)的关系中,用户可能希望将相关的脚本片段组织在一起,形成一个命名空间,以避免命名冲突。这可以通过在脚本宿主中管理这些命名空间来实现,确保每个脚本段都有清晰的标识和范围。 这一章节扩展了标准C编写COM脚本的能力,不仅关注基础功能,还涵盖了如何处理脚本的持久化、宏管理以及与之相关的变量操作,这些都是在开发复杂COM应用时必不可少的高级特性。通过学习这些内容,开发者能够更好地构建灵活且可维护的脚本宿主应用程序。