在Electron中调用节点本机插件(C ++)

时间:2015-10-07 08:01:09

标签: c++ node.js electron

我对Node JS和Electron来说是全新的。我正在尝试使用Electron和Node JS将C ++与HTML集成。我已经通过以下列举了一些例子:GIT

我想要做的是从我的网页调用本机函数(hello()),这是由电子加载的javascript。我使用node-gyp configure生成我的Visual Studio解决方案文件。 (的的.sln )。后来我用Visual Studio 2013 Express编译了我的代码,它在build \ Release Folder中成功生成了我的 .node 文件。

这是我的index.js文件:

var addon = require('./build/Release/hello.node');
console.log(addon.hello());

当我只使用node index.js运行时,它会给我所需的输出:

world

但问题来自我使用电子时。我使用电子二进制(32位)来运行我的网页。

以下是我的 main.js 文件:

var app = require('app');  // Module to control application life.
var BrowserWindow = require('browser-window');  // Module to create native browser window.


require('crash-reporter').start();

var mainWindow = null;

// Quit when all windows are closed.
app.on('window-all-closed', function() {
  if (process.platform != 'darwin') {
    app.quit();
  }
});

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
app.on('ready', function() {
    mainWindow = new BrowserWindow({width: 1366, height: 768});
    mainWindow.loadUrl("file://" + __dirname + "/HtmlFile/index.html");
    mainWindow.on('closed', function() {
    mainWindow = null;
  });
});

现在这是我的javascript,我正在调用本机插件:

//************* My Functional logic **************
 //************************************************

var addon = require('../build/Release/hello');
alert(addon.hello());

当我运行此页面或加载此页面时,我收到以下错误:

Uncaught Error: %1 is not a valid Win32 application. ATOM_SHELL_ASAR.js:137
C:\Users\Administrator\Desktop\MyAPP\build\Release\hello.node

以下是我的package.json

{
  "name": "MyAPP",
  "version": "1.0.0",
  "description": "Desc",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nan": "^2.0.9"
  },
  "gypfile": true
}

这是我的binding.gyp

{
  "targets": [
    {
      "target_name": "hello",
      "sources": [ "hello.cc" ],
      "include_dirs": [
        "<!(node -e \"require('nan')\")"
      ]
    }
  ]
}

4 个答案:

答案 0 :(得分:2)

看起来您可能没有配置正确的二进制文件。很抱歉不确定这是否适用于本机模块,但您可以尝试rebuilding ...

注意:请确保您拥有node-gyp命令的正确参数(如果这是您将重建的方式)。

  • --target=<your electron version>
  • --target_platform=win32(不在示例链接中,但您似乎在使用Windows)
  • --arch=<your architecture>(x64 = 64位,x86 = 32位)

答案 1 :(得分:2)

正如我在评论中提到的,我遇到了同样的问题。要解决它,您需要添加一些额外的标志:

node-gyp rebuild --target=<your electron version> --arch=<insert your arch> --dist-url=https://atom.io/download/atom-shell

这将从atom.io站点获得正确的要求并正确构建加载项。有关更多信息,您可以使用本机模块检查电子的特定docs

答案 2 :(得分:1)

直接使用node-gyp将使用nodejs标头构建,但是电子具有不同的标头。

首先,你应该弄清楚电子版电子正在使用。 你可以写一个像这样的js

console.log(process.version);

使用电子执行此脚本,我的版本是0.36.1 并将目录更改为您要构建的模块

#On Windows Try this
cd /path-to-module/
npm install bindings nan node-gyp
node-gyp rebuild --target=0.36.1 --arch=x64 --dist-    url=https://atom.io/download/atom-shell
#notice the target version is the electron binary version

答案 3 :(得分:1)

关于本机插件中节点与电子标头的个人问题需要不同的dist-url参数值:

 --dist-url=https://atom.io/download/electron

希望它会对某人有所帮助。

PS:还是无法弄清楚如何在Windows中使用.npmrc设置它(