程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在CPP中調用Jscript中的函數

在CPP中調用Jscript中的函數

編輯:關於C語言

在 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved