C++ 中调用 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 );
C++ 中调用 Jscript 的函数相关推荐
- 奇淫怪巧之在Delphi中调用不申明函数
前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...
- 在C#中调用windows API函数
Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...
- f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码
f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码 分类: Python Numpy_Scipy fortran MinGW_GCC_Boost f2py 2012 ...
- Js文件中调用其它Js函数的方法(转)
2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...
- Js文件中调用其它Js函数的方法
2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...
- Lua中调用C/C++函数 (转)
1.前言 上次偶说到从C/C++中调用Lua的函数, 然后就有朋友问从Lua中如何调用C/C++的 函数, 所以偶们这次就来说说这个问题. 首先偶们会在C++中建立一个函数, 然后 告知Lua有这个函 ...
- vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法
vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...
- vue中在一个函数中调用另外一个函数
vue中在一个函数中调用另外一个函数 this.$options.methods.函数名.bind(this)();
- 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数
如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...
- JAVA中调用C语言函数简单教程
背景知识 本地代码 在JAVA中使用其他语言的代码(如C/C++)称为本地代码. 历史原因 JAVA的早期阶段,很多人认为使用C和C++来加速JAVA应用中的关键部分是个好主意,但是实际上,虽然JAV ...
最新文章
- 测试CH340C的功能,制作MicroPython ESP8266,ESP32下载器
- library “libopencv_java4.so“ not found“
- 运维-系统架构师经验总结:
- fh admin mysql版本_mysql5.6 和 mysql8 配置的差异
- Exception in thread main java.lang.NullPointerException
- jQuery 的选择器 元素选择器
- 3: Java虚拟机体系结构
- 2017.10.7 括号序列 思考记录
- 攻防世界 pwn 二进制漏洞简单题练习区 答题(1-10题解)
- 计算机逻辑与 或 非的表达式,逻辑表达式
- 从零构建神经网络-实现异或门操作
- 德军总部2新巨人计算机丢失,德军总部2新巨人打不开怎么办 德军总部2新巨像进不去解决方法...
- php 容器源码分析,Pimple运行流程浅析(PHP容器)
- php一年过去多少天,php获取一年有多少天
- IIS开启伪静态后html静态页面无法访问的解决方法
- 【最全】ISTQB- FL模拟题(含答案)
- fsck的介绍和应用
- BPS 307i SM 100劳易测条码定位系统
- 【AdvancedLocomotionSystemV】第七篇 C++ 实现角色蹲伏和跑步细节
- 04. Python-条件、循环和其他语句