精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

在CPP中调用Jscript中的函数

在CPP中调用Jscript中的函数

  


                  在 CPP 中调用 Jscript 中的函数


在 C   中调用 Jscript 的函数非常简单, Windows 提供了一个 msscript.ocx 的控件,利用这个控件可以直接操作 Jscript: 执行一段 Jscript 脚本,或者调用指定的函数。我写了一个简单的例子:


l 导入 msscript.ocx 。下面这条指令会在项目目录中生成 msscript.tli 和 msscript.tlh 两个文件,里面有 msscript.ocx 中所有接口的描述和 IID 的定义。 <CODE>#import "msscript.ocx[/img]


l 声明一个对象。 <CODE>CComPtr &lt; IScriptControl &gt; m_iScriptControl; </CODE>


l 创建对象实例 <CODE>if ( SUCCEEDED ( m_iScriptControl . CoCreateInstance ( __uuidof ( ScriptControl )))) </CODE>


l 设置语言等属性。


<CODE>m_iScriptControl -&gt; PutLanguage (L "JScript[/img]m_iScriptControl -&gt; PutAllowUI ( VARIANT_FALSE ); </CODE><CODE>


  


                  </CODE>


l 加入 Jscript 代码。 <CODE>m_iScriptControl -&gt; AddCode (L "function test(str1, str2) { return str1   \"-ok-\[/img]


l 获得函数,这里要说明的是 GetItem 的参数是 1 到 n ,而不是 0 到 n-1 。 <CODE>CComPtr &lt; IScriptProcedureCollection &gt; aProcedureSet = m_iScriptControl -&gt; GetProcedures ();

long n = aProcedureSet -&gt; GetCount ();

CComPtr &lt; IScriptProcedure &gt; aProcedure = aProcedureSet -&gt; GetItem ( _variant_t ( n ));

_bstr_t strFunction = aProcedure -&gt; GetName (); </CODE>


l 准备函数参数。 <CODE>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 &lt; n ; i   )

{

va . bstrVal = SysAllocString (L "test[/img]SafeArrayPutElement ( psa , & i , & va );

} </CODE>


l 调用函数。 <CODE>_variant_t Result = m_iScriptControl -&gt; Run ( strFunction , & psa ); </CODE>


l 释放参数。


<CODE>for ( i = 0; i &lt; n ; i   )

{

va . bstrVal = SysAllocString (L "test[/img]SafeArrayGetElement ( psa , & i , & va );

SysFreeString ( va . bstrVal );

}

SafeArrayDestroy ( psa ); </CODE>

TOP

发新话题