您的位置:首页 > 编程语言 > C语言/C++

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

2010-10-14 14:12 483 查看
例如一个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 = 0; i < 3; i++)

{

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=0;i<3;i++)

{

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);

}

// --------------- End -----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐