如何实现 js 和 c++ 的互相调用

JavaScript019

如何实现 js 和 c++ 的互相调用,第1张

脚本执行的基础是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

}

<font size=5 color='#333333'>以下主要讲WKWebView中OC与JS交互,UIWebView这里稍微简单介绍 </font>

<font size=3>这里重点关于wkwebview中JS调用OC<font color='#20B2AA'>返回值的问题</font>,普通的OC与JS交互网上资料一大堆</font>

<font size=4 color='#666666'>稍微简单介绍下:</font>

<font size=3 color='#666666'>下面是<font color=red>错误</font>调用:</font>

<font size=3 color='#999999'>JavaScript 在浏览器环境中发出URL请求, Objective-C 截获请求以获取相关请求的思路. 在Objective-C 中在实现UIWebViewDelegate 时截获请求:</font>

<font size=3>以上前三种方式<font size=5 color=red>缺点</font></font>

window.webkit.messageHandlers.<方法名>.postMessage(<数据>)、URL请求截获、监听Cookie的三种方式,整个过程是异步,不能同步

在JavaScript中不能直接获取Objective-C处理的返回值,需要Objective-C 调用JavaScript层自己实现的api才能得到返回值

使用callback 比较麻烦,需要在JavaScript 上自己实现

包含api的.h文件,然后直接调用就可以了,比如winsock.h,可以调用recv等函数,也可以在函数前面加::

答案补充

HWND hWnd = ::FindWindow(sClassName, sWindowName)//传入类明到sClassName,窗口名sWindowName,否则传入NULL