职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1314|回复: 1

在CPP中调用Jscript中的函数

[复制链接]
只学java 发表于 2007-7-8 11:39 | 显示全部楼层 |阅读模式
在 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 );
原文地址:http://dev.csdn.net/author/absurd/7c6ea0f7f67044eeba924a98278a477a.html
fossil 发表于 2011-8-11 14:24 | 显示全部楼层
慢慢来,呵呵
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 12:23 , Processed in 0.122633 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表