在 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 的函数相关推荐

  1. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  2. 在C#中调用windows API函数

    Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...

  3. f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码

    f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码 分类: Python Numpy_Scipy fortran MinGW_GCC_Boost f2py 2012 ...

  4. Js文件中调用其它Js函数的方法(转)

    2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...

  5. Js文件中调用其它Js函数的方法

    2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...

  6. Lua中调用C/C++函数 (转)

    1.前言 上次偶说到从C/C++中调用Lua的函数, 然后就有朋友问从Lua中如何调用C/C++的 函数, 所以偶们这次就来说说这个问题. 首先偶们会在C++中建立一个函数, 然后 告知Lua有这个函 ...

  7. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法

    vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...

  8. vue中在一个函数中调用另外一个函数

    vue中在一个函数中调用另外一个函数 this.$options.methods.函数名.bind(this)();

  9. 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数

    如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...

  10. JAVA中调用C语言函数简单教程

    背景知识 本地代码 在JAVA中使用其他语言的代码(如C/C++)称为本地代码. 历史原因 JAVA的早期阶段,很多人认为使用C和C++来加速JAVA应用中的关键部分是个好主意,但是实际上,虽然JAV ...

最新文章

  1. 测试CH340C的功能,制作MicroPython ESP8266,ESP32下载器
  2. library “libopencv_java4.so“ not found“
  3. 运维-系统架构师经验总结:
  4. fh admin mysql版本_mysql5.6 和 mysql8 配置的差异
  5. Exception in thread main java.lang.NullPointerException
  6. jQuery 的选择器 元素选择器
  7. 3: Java虚拟机体系结构
  8. 2017.10.7 括号序列 思考记录
  9. 攻防世界 pwn 二进制漏洞简单题练习区 答题(1-10题解)
  10. 计算机逻辑与 或 非的表达式,逻辑表达式
  11. 从零构建神经网络-实现异或门操作
  12. 德军总部2新巨人计算机丢失,德军总部2新巨人打不开怎么办 德军总部2新巨像进不去解决方法...
  13. php 容器源码分析,Pimple运行流程浅析(PHP容器)
  14. php一年过去多少天,php获取一年有多少天
  15. IIS开启伪静态后html静态页面无法访问的解决方法
  16. 【最全】ISTQB- FL模拟题(含答案)
  17. fsck的介绍和应用
  18. BPS 307i SM 100劳易测条码定位系统
  19. 【AdvancedLocomotionSystemV】第七篇 C++ 实现角色蹲伏和跑步细节
  20. 04. Python-条件、循环和其他语句

热门文章

  1. stm32f4有重映射么_stm32f4引脚重映射
  2. java 热力图,热力图
  3. 微信会员卡,微信会员系统
  4. 网盘上传文件服务器失败原因,win10系统在百度网盘上传文件一直失败的恢复教程...
  5. scala 打印乘法口诀表
  6. 详解:字符转换函数(大写转小写,小写转大写)
  7. 使用Pytorch识别字符验证码
  8. 爱的无常、当下、柔软
  9. AttnGAN代码复现(详细步骤+避坑指南)文本生成图像
  10. Xcelsius调用Webservice实例