|
 |
您现在的位置: 红色黑客联盟 >> 程序开发 >> 软件开发 >> C/C++ >> 正文 |
| 在CPP中调用Jscript中的函数 |
|
|
|
| 文章录入:7747.Net 责任编辑:7747.Net 更新时间:2006-9-21 10:38:12 |
|
|
【字体:小 大】 |
|
在 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
|
| |
| 您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力 |
|
|
| |
上一个文章: C++中控制Windows关机的实用技巧
下一个文章: 函数指针与软件设计 |
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |