在CPP中调用Jscript中的函数
2008-02-23 05:35:13来源:互联网 阅读 ()
在 CPP 中调用 Jscript 中的函数
在 C 中调用 Jscript 的函数很简单, Windows 提供了一个 msscript.ocx 的控件,利用这个控件能够直接操作 Jscript: 执行一段 Jscript 脚本,或调用指定的函数。我写了一个简单的例子:
l 导入 msscript.ocx 。下面这条指令会在项目目录中生成 msscript.tli 和 msscript.tlh 两个文档,里面有 msscript.ocx 中任何接口的描述和 IID 的定义。
#import "msscript.ocx" no_namespace
l 声明一个对象。
CComPtr < IScriptControl > m_iScriptControl;
l 创建对象实例
if ( SUCCEEDED ( m_iScriptControl . CoCreateInstance ( __uuidof ( ScriptControl ))))
l 配置语言等属性。
m_iScriptControl -> PutLanguage (L "JScript" );
m_iScriptControl -> PutAllowUI ( VARIANT_FALSE );
l 加入 Jscript 代码。
m_iScriptControl -> AddCode (L "function test(str1, str2) { return str1 \"-ok-\" str2; }" );
l 获得函数,这里要说明的是 GetItem 的参数是 1 到 n ,而不是 0 到 n-1 。
CComPtr < IScriptProcedureCollection > aProcedureSet = m_iScriptControl -> GetProcedures ();
long n = aProcedureSet -> GetCount ();
CComPtr < IScriptProcedure > aProcedure = aProcedureSet -> GetItem ( _variant_t ( n ));
_bstr_t strFunction = aProcedure -> GetName ();
l 准备函数参数。
VARIANT va = {0};
va . vt = VT_BSTR ;
n = 2;
SAFEARRAYBOUND bounds [1] = {0};
bounds [0]. cElements = n ;
SAFEARRAY * psa = SafeArrayCreate ( VT_VARIANT , 1, bounds );
long i = 0;
for ( i = 0; i < n ; i )
{
va . bstrVal = SysAllocString (L "test" );
SafeArrayPutElement ( psa , & i , & va );
}
l 调用函数。
_variant_t Result = m_iScriptControl -> Run ( strFunction , & psa );
l 释放参数。
for ( i = 0; i < n ; i )
{
va . bstrVal = SysAllocString (L "test" );
SafeArrayGetElement ( psa , & i , & va );
SysFreeString ( va . bstrVal );
}
SafeArrayDestroy ( psa );
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C#教程第五课:方法
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash