在C++中怎么调用一个js中的方法

在C++中怎么调用一个js中的方法,第1张

例如一个test.js内容如下:

function main( input )

{

return input

}

在C++中调用方法如下:

// vcJscript.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#import "或谈C:/windows/system32/msscript.ocx" // msscript.ocx

using namespace MSScriptControl

#include <fstream>

#include <string>

using namespace std

int _tmain(int argc, _TCHAR* argv[])

{

HRESULT hr = CoInitialize(NULL)

IScriptControlPtr pScriptControl(__uuidof(ScriptControl))

pScriptControl->Language = "JavaScript"

//pScriptControl->AllowUI = TRUE

fstream file

file.open( "test.js" )

string strFileContent, strTemp

char szTemp[1024]=""

do

{

file.read(szTemp, 1024)

strFileContent.append( szTemp )

memset( szTemp, 0, 1024 )

}

while ( !file.fail() )

file.close()

pScriptControl->AddCode(strFileContent.c_str())

VARIANT A = pScriptControl->Eval("main(4)")

int iRet = A.intVal

return 0

}

脚本控件有四种方法。其中之一是 Run(),运行子例程或函数逗团岁。在调用此方法之前,指定的脚本语言、 设置 AllowUI,并将下面的脚本添加到脚本控件:山睁

//---------------------- Begin ---------------------------

#include <stdio.h>

#import "C:/winnt/system32/msscript.ocx" // msscript.ocx

using namespace MSScriptControl

int main(void)

{

HRESULT hr = CoInitialize(NULL)

IScriptControlPtr pScriptControl(__uuidof(ScriptControl))

// Create a VARIANT array of VARIANTs which hold BSTRs

LPSAFEARRAY psa

SAFEARRAYBOUND rgsabound[] = { 3, 0 }// 3 elements, 0-based

int i

psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound)

if (!psa)

{

return E_OUTOFMEMORY

}

VARIANT vFlavors[3]

for (i = 0i <3i++)

{

VariantInit(&vFlavors[i])

V_VT(&vFlavors[i]) = VT_BSTR

}

V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"))

V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"))

V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip"))

long lZero = 0

long lOne = 1

long lTwo = 2

// Put Elements to the SafeArray:

hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0])

hr = SafeArrayPutElement(psa, &lOne,&vFlavors[1])

hr = SafeArrayPutElement(psa, &lTwo,&vFlavors[2])

// Free Elements from the SafeArray:

for(i=0i<3i++)

{

SysFreeString(vFlavors[i].bstrVal)

}

// Set up Script control properties

pScriptControl->Language = "JScript"

pScriptControl->AllowUI = TRUE

pScriptControl->AddCode(

"function MyStringFunction(Argu1,Argu2,Argu3)/

{ return /"hi there/" }" )

// Call MyStringFunction with the two args:

_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa)

// Convert VARIANT to C string:

_bstr_t bstrReturn = (_bstr_t)outpar

char *pResult = (char *)bstrReturn

// Print the result out:

printf("func=%s/n",pResult)

// Clean up:

SafeArrayDestroy(psa)

CoUninitialize()

return(0)

}

脚本执行的基础是WEB控件,

那么C++在WINDOWS下运行可昌搏扮以装入WEB控件实现脚本调用。

下面是一段引用某位博主的代码可以参考一下。

// vcJscript.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#import "C:/windows/system32/msscript.ocx" // msscript.ocx

using namespace MSScriptControl

#include <fstream>

#include <string>

using namespace std

int _tmain(int argc, _TCHAR* argv[])

{

HRESULT hr = CoInitialize(NULL) //使用一个变量初始化COM设置,单线程运行

IScriptControlPtr pScriptControl(__uuidof(ScriptControl))//初始化脚本控件

pScriptControl->Language = "JavaScript"//设置语言

pScriptControl->AllowUI = TRUE//设置显示

fstream file//文件流用于读出JS代码

file.open( "test.js" )

string strFileContent, strTemp

char szTemp[1024]=""

do

{

file.read(szTemp, 1024)

strFileContent.append( szTemp )//拼接耐灶JS文件

memset( szTemp, 0, 1024 )

}

while ( !file.fail() )

file.close()

pScriptControl->AddCode(strFileContent.c_str())//向控件加入银启代码

VARIANT A = pScriptControl->Eval("main(4)")//获取返回值

int iRet = A.intVal

return 0

}

你要找的话也应该是找悔升for VB、PB的控件,一般是类似Delphi的VCL控件,并且是成套的,也就是这套控件包中包含有美化过的日历控州答件,类似换肤的那种.你可以碧迹老到专业的源码下载网站找,别找js之类的

据我所知只有ASP、PHP语言之类的包括.Net的程序才能直接调用JS.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12355120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存