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

最近在研究登录WEBQQ

JavaScript算法研究出来了…..WEBQQ登录算法

……但是 =.=C/C++不知道怎么调用JavaScript的代码在网上找资料,终于让我找到了

原地址:http://blog.csdn.net/sding/article/details/5940677

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

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据