博客
关于我
Electron框架下使用Nan模块开发C++插件
阅读量:733 次
发布时间:2019-03-21

本文共 2341 字,大约阅读时间需要 7 分钟。

Electron框架下使用Nan模块开发C++插件

最近接到PC桌面端视频开发的任务,之前一直使用C++外加AngularJS的模式开发,感觉架构略显笨重,尤其是在修改C++时,可是相当的繁琐,成本太高,客户受不了了 recent发现了一个新玩意Electron,集成Vue又可以插入C++插件,使业务功能解耦。

网上关于Electron入门文档众多,本人慢慢搞定了,本文正记录在追加C++插件过程中遇到的坑,供入门者参考。

项目名下新建三个文件:package.json

{"name": "项目名","version": "1.0.0","description": "Electron的C++插件","main": "main.js","dependencies": {"electron": "^3.0.8"},"devDependencies": {"electron-packager": "^12.2.0"},"scripts": {"test": "npm test","start": "electron ."},"author": "yaohj","license": "ISC"}

main.js

const electron = require('electron')const app = electron.appconst BrowserWindow = electron.BrowserWindowconst path = require('path')const url = require('url')

let mainWindow

function createWindow() {mainWindow = new BrowserWindow({width: 800,height: 600})mainWindow.loadURL(url.format({pathname: path.join(__dirname, 'index.html'),protocol: 'file:',slashes: true}))mainWindow.webContents.openDevTools()mainWindow.on('closed', function() {mainWindow = null})}

app.on('ready', createWindow)app.on('window-all-closed', function() {if (process.platform !== 'darwin') {app.quit()}})

app.on('activate', function() {if (mainWindow === null) {createWindow()}})

index.html

项目目录下执行命令:electron . 或 npm start

开始追加C++插件代码,在项目名/native下新建C++程序

注:引用网络代码段

#include <nan.h>void Add(const Nan::FunctionCallbackInfov8::value& info) {if (info.Length() < 2) {Nan::ThrowTypeError("Wrong number of arguments");return;}if (!info[0]->IsNumber() || !info[1]->IsNumber()) {Nan::ThrowTypeError("Wrong arguments");return;}double arg0 = info[0]->NumberValue();double arg1 = info[1]->NumberValue();v8::Localv8::number num = Nan::New(arg0 + arg1);info.GetReturnValue().Set(num);}

void Init(v8::Localv8::object exports) {exports->Set(Nan::New("add").ToLocalChecked(),Nan::Newv8::functiontemplate(Add)->GetFunction());}

NODE_MODULE(demo, Init)

修改index.html:

项目目录下新建binding.gyp:

{"targets": [{"target_name": "demo","sources": ["native/demo.cc"],"include_dirs": ["<! zákonpirat тут>"]}]

编译运行环境配置

安装Python2.7(官网下载安装)安装node-gyp:npm install -g node-gyp安装non:npm install -g non

开始编译运行

node-gyp configurenode-gyp build(网上资料编译没说明,编译出的demo.node不能在electron中运行,只能在node.js调用)

node-gyp rebuild --target=3.0.8 --arch=x64 --(dist-url=https://atom.io(download/electron) (有时build不好用,试试用rebuild)

运行

electron .

另外,build目录下有binding.sln,可用Visual Studio打开 작성C++代码

总结过程中坑太多,上述是经过几百次试验的最简步骤

转载地址:http://adrgz.baihongyu.com/

你可能感兴趣的文章
OpenFeign源码学习
查看>>
OpenFeign组件声明式服务调用
查看>>
Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
查看>>
opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
查看>>
OpenGL 的内置矩阵种种
查看>>
OpenGL中shader读取实现
查看>>
OpenGL着色器、纹理开发案例
查看>>
OpenJDK11 下的HSDB工具使用入门
查看>>
openjdk踩坑
查看>>
openjudge 1792 迷宫 解析报告
查看>>
Openlayers Draw的用法、属性、方法、事件介绍
查看>>
Openlayers layer 基础及重点内容讲解
查看>>
Openlayers map三要素(view,target,layers),及其他参数属性方法介绍
查看>>
Openlayers Map事件基础及重点内容讲解
查看>>
Openlayers Select的用法、属性、方法、事件介绍
查看>>
Openlayers Source基础及重点内容讲解
查看>>
Openlayers view三要素(zoom,center,projection)及其他参数属性方法介绍
查看>>
Openlayers 入门教程(一):应该如何学习 Openlayers
查看>>
openlayers 入门教程(三):view 篇
查看>>
openlayers 入门教程(九):overlay 篇
查看>>