MFC 如何运行jscript脚本并获得返回值
在 MFC 中运行 JScript 脚本并获取返回值,可以通过以下步骤实现:
- 引入 JScript 引擎:
#import "C:\Windows\System32\jscript.dll"
using namespace JScript;
- 创建 JScript 引擎对象:
IActiveScript* pScriptEngine = NULL;
CoCreateInstance(CLSID_JScript, NULL, CLSCTX_ALL, IID_IActiveScript, (void**)&pScriptEngine);
- 添加脚本代码到引擎中:
// 脚本代码
CString scriptCode = L"function add(a, b) { return a + b; }";
// 添加脚本代码到引擎中
pScriptEngine->SetScriptState(SCRIPTSTATE_CONNECTED);
pScriptEngine->AddScriptlet(NULL, scriptCode, L"test.js", L"JScript", NULL, NULL, SCRIPTTEXT_ISVISIBLE);
- 执行脚本并获取返回值:
// 准备参数
VARIANTARG args[2];
VariantInit(&args[0]);
VariantInit(&args[1]);
args[0].vt = VT_I4;
args[0].lVal = 1;
args[1].vt = VT_I4;
args[1].lVal = 2;
// 执行脚本
VARIANT result;
VariantInit(&result);
EXCEPINFO excepInfo;
pScriptEngine->ParseScriptText(L"add(1, 2);", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISVISIBLE, &result, &excepInfo);
// 获取返回值
CString strResult;
if (result.vt == VT_BSTR) {
strResult = result.bstrVal;
}
完整代码示例:
#import "C:\Windows\System32\jscript.dll"
using namespace JScript;
void RunJScript()
{
// 创建 JScript 引擎对象
IActiveScript* pScriptEngine = NULL;
CoCreateInstance(CLSID_JScript, NULL, CLSCTX_ALL, IID_IActiveScript, (void**)&pScriptEngine);
// 脚本代码
CString scriptCode = L"function add(a, b) { return a + b; }";
// 添加脚本代码到引擎中
pScriptEngine->SetScriptState(SCRIPTSTATE_CONNECTED);
pScriptEngine->AddScriptlet(NULL, scriptCode, L"test.js", L"JScript", NULL, NULL, SCRIPTTEXT_ISVISIBLE);
// 准备参数
VARIANTARG args[2];
VariantInit(&args[0]);
VariantInit(&args[1]);
args[0].vt = VT_I4;
args[0].lVal = 1;
args[1].vt = VT_I4;
args[1].lVal = 2;
// 执行脚本
VARIANT result;
VariantInit(&result);
EXCEPINFO excepInfo;
pScriptEngine->ParseScriptText(L"add(1, 2);", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISVISIBLE, &result, &excepInfo);
// 获取返回值
CString strResult;
if (result.vt == VT_BSTR) {
strResult = result.bstrVal;
}
// 释放资源
VariantClear(&result);
VariantClear(&args[0]);
VariantClear(&args[1]);
pScriptEngine->Close();
pScriptEngine->Release();
}
``
原文地址: https://www.cveoy.top/t/topic/chq5 著作权归作者所有。请勿转载和采集!