在CPP中调用Jscript中的函数

原创 2006年06月10日 18:43:00

CPP中调用Jscript中的函数

 

C++中调用Jscript的函数非常简单,Windows提供了一个msscript.ocx的控件,利用这个控件可以直接操作Jscript: 执行一段Jscript脚本,或者调用指定的函数。我写了一个简单的例子:

 

l         导入msscript.ocx。下面这条指令会在项目目录中生成msscript.tlimsscript.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的参数是1n,而不是0n-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文件中调用c++定义的函数

问题描述:用c语言写的程序
  • wang11234514
  • wang11234514
  • 2014年04月19日 16:57
  • 2524

如何在一个cpp中调用另一个cpp中的类?

解决方案:新建一个同名头文件,将这个cpp中的类的声明放在头文件中,在这个cpp以及要调用的cpp中include这个头文件即可。 思路来源与原理: 在面向对象的程序开发中,一般做法是将类的声...
  • huhang600
  • huhang600
  • 2015年04月06日 18:42
  • 7158

C++中内部函数(静态函数)和外部函数的用法

函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。 一、内部函数 如果一...
  • bzhxuexi
  • bzhxuexi
  • 2013年09月17日 12:41
  • 3055

VC++的.cpp文件调用CUDA的.cu文件中的函数

  • 2017年05月11日 22:20
  • 26KB
  • 下载

02 JScript 函数

JScript 函数 Microsoft Jscript 函数执行操作,也可以返回值。某些时候是计算或比较的结果。函数又被称为“全局方法”。 一个函数中包含有几个操作。这样可使得代码更合理化。可以...
  • kuangfengbuyi
  • kuangfengbuyi
  • 2011年12月25日 00:15
  • 1338

[FUNC]ahk利用JScript编码函数

;sunwind 整理 ;2013-5-26 13:17:31 ;~ 编码函数,它输出符号的utf-8形式 MsgBox % encode2UTF8("测试") encode2UTF8(Uri) {...
  • liuyukuan
  • liuyukuan
  • 2017年07月14日 16:27
  • 261

CodeDomProvider JScript生成计算函数

using System; using System.CodeDom.Compiler; using System.Reflection; using Microsoft.JScript; ...
  • liguo9860
  • liguo9860
  • 2011年01月20日 09:28
  • 633

JScript中正则表达函数的说明与应用

作为模式匹配下文本替换、搜索、提取的强有力工具,正则表达式(Regular Expression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越...
  • u014739778
  • u014739778
  • 2014年05月02日 11:23
  • 230

extern C配合__cplusplus实现CPP文件和C文件的函数互相调用

C语言 c语言 先看一下区别,首先看一下编译一个最简单的函数 demo.cvoid testFunction(){ return; }demo.cpp extern "C"{ vo...
  • dreamInTheWorld
  • dreamInTheWorld
  • 2017年07月25日 15:48
  • 360

CPP-Calling constructors(调用构造函数)

构造函数的调用: 构造函数和普通函数调用有所区别,看以下生成类Clock对象的几条语句:Clock c1; Clock c2(8,25,30); Clock c3=Clock(22,15,10) C...
  • CCMPI
  • CCMPI
  • 2015年09月20日 00:28
  • 251
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在CPP中调用Jscript中的函数
举报原因:
原因补充:

(最多只允许输入30个字)