1. 匯入庫 ,該指令一般加在 stdafx.h 中
#import "msscript.ocx" no_namespace
2. 建立指令碼對象
//指令碼引擎
IScriptControlPtr m_pScript;
m_pScript.CreateInstance(__uuidof(ScriptControl));
m_pScript->Timeout = 1000 * nTimeout; //逾時設定
m_pScript->PutAllowUI( VARIANT_FALSE );
m_pScript->PutLanguage( _bstr_t(_T("JScript")) );
3. 讀取指令檔
wstring js = read_file("c:/1.js");//read_file 函數此處略去
4. 增加代碼並執行
//增加代碼
m_pScript->AddCode( _bstr_t(js.c_str()));
//執行代碼(1.js 中有 main 函數)
m_pScript->(_bstr_t(_T("main()")));
至於指令碼和VC的互動,可以通過建立 com 組件來實現,在 vc 工程中,增加一個 com 組件,比如 IVREngine,然後添加方法,在執行指令碼前,把該對象增加到指令碼引擎中,代碼如下:
//輔助對象
CComPtr<IIVREngine> pIVREngine;
pIVREngine.CoCreateInstance(__uuidof(IVREngine));
m_pScript->AddObject( _bstr_t("IVR"), pIVREngine, VARIANT_TRUE );
這時,在指令碼(1.js)中,就可以直接調用 IIVREngine 提供的方法了,比如 IVR.PlayFile("c:/1.wav");
注意
已有相應的類CScriptObject
BOOL CScriptDemoApp::InitInstance()
{
// Initialize COM
CoInitialize(NULL);
.......
}