现在的位置: 首页 > 综合 > 正文

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

2013年03月27日 ⁄ 综合 ⁄ 共 2440字 ⁄ 字号 评论关闭

 

 

例如一个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 -----------------------

抱歉!评论已关闭.