C++ 中调用 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 ); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzksword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值