C++通过Microsoft Script Control控件调用JS脚本

有时在程序开发中,需要在程序中调用一些比如javascript这样的脚本,Microsoft为我们提供了Script Control组件即是用于实现这样的功能。
Script Control是一个ActiveX控件,它的函数都封装在了msscript.ocx文件中,我们可以直接下载该文件即可。

ScriptControl接口

属性:
AllowUI 检测是否允许运行用户的接口元素。如果为False,则诸如消息框之 类的界面元素不可见。
CodeObject 脚本暴露给宿主调用的对象。只读。
Modules 宿主提供给脚本的组件库模块。只读。(COM组件通常都是以对象收集的形式向用户提供可以留给用户二次开发的对象集合,每一个 收集即一个Modules)
Language 设置或获取脚本引擎解释的语言,例如:VBScript、JScript。
Name 脚本引擎的名称。只读。
Procedures 返回模块中定义的过程的集合
SitehWnd 在脚本中显示UI的父窗口句柄
State 设置或返回控件的状态,如果为0,控件只执行语句但不转发事件,为1则为加入的本控件接受的对象转发事件。
Timeout 控件的执行脚本的超时值,-1表示不超时
UseSafeSubset 设置或返回宿主程序是否关心安全。宿主程序的安全级别可以从此属性设置
Error 错误对象,发生错误时,此属性返回一个错误对象

方法:
AddCode 往脚本引擎中加入要执行的脚本
AddObject 往脚本引擎加入一个对象,以便在脚本中可以使用该 对象提供的方法等。
Eval 表达式求值
ExecuteStatement 解释并执行脚本语句
Reset 丢弃所有的对象和代码,将State属性置0。
Run 运行一个指定的过程

在控制台程序中调用

Microsoft Script Control的调用比较简单,首先创建ScriptControl对象,然后设置语言类型,调用AddCode写入脚本代码,最后调用Run或Eval执行脚本。

#include "stdafx.h"
#import "D:/msscript.ocx"  // msscript.ocx 
using namespace MSScriptControl;
int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr = CoInitialize(NULL); 
    IScriptControlPtr pScriptControl(__uuidof(ScriptControl)); 
    pScriptControl->Language = "JavaScript"; //脚本类型
    pScriptControl->AllowUI = TRUE;
    pScriptControl->AddCode("function output(){return 12;}");//脚本代码
    VARIANT a;
    //a = pScriptControl->Run("output", NULL);
    a = pScriptControl->Eval("output()");//执行脚本
    printf("%d\n", a.intVal);
    return 0;
}

调用Run方法时,第一个参数是脚本的函数名,第二个参数是一个SAFEARRAY类型的数组,存储脚本的参数。
调用Eval方法直接传入脚本函数及带有的参数表即可,比如可以这样:pScriptControl->Eval(“output(1, 2)”);

在MFC中调用

在MFC中首先要将组件添加到工具箱中。
在工具箱中随便选个项,右键,选择“选择项”。
这里写图片描述
在弹出对话框中选择“COM组件”,点击“浏览”,添加msscript.ocx文件。
这里写图片描述
这样,在工具箱中就可以看到出现了一个ScriptControl Object选项。将它拖入窗口中,右键添加变量。并且可以直接在右侧栏中对AllowUI等属性进行编辑。

然后我们添加一个按钮,处理单击事件

void CMFCScriptControlTestDlg::OnBnClickedButton1()
{
    TCHAR script[MAX_PATH] = L"function output(){return 2;}";
    m_sc.AddCode(script);//
    VARIANT A = m_sc.Eval(L"output()");
    TCHAR str[MAX_PATH] = {0};
    wsprintf(str, L"%d", A.intVal);
    MessageBox(str);
    // TODO: 在此添加控件通知处理程序代码
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值