node.js — вызов собственных узловых аддонов (C ++) в Electron

Я совершенно новичок в Node JS и Electron. Я пытаюсь интегрировать C ++ с HTML, используя Electron и Node JS. Я прошел несколько примеров, приведенных: GIT

Я пытаюсь вызвать нативную функцию (hello ()) из javascript моей веб-страницы, которая загружается электроном. я использовал node-gyp configure создать мой файл решения Visual Studio. (.SLn). А позже я скомпилировал свой код с Visual Studio 2013 Express, который успешно сгенерировал мой .узел файл в папке build \ Release.

Это мой файл 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')\")"]
}
]
}

6

Решение

Похоже, вы не правильно настроили двоичный файл. Извините, не уверен, что это будет работать для родного модуля, но вы можете попробовать восстановление

Замечания: Пожалуйста, убедитесь, что у вас есть правильные аргументы для вашей команды node-gyp (если так вы будете перестраивать).

  • --target=<your electron version>
  • --target_platform=win32 (Не в примере ссылки, но вы, кажется, используете Windows)
  • --arch=<your architecture> (x64 = 64 бита, x86 = 32 бита)
2

Другие решения

Как я уже упоминал в комментариях, я столкнулся с этой же проблемой. Чтобы решить эту проблему, вам нужно добавить пару дополнительных флагов:

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

Это позволит получить правильные требования с сайта atom.io и правильно построить надстройку. Для получения дополнительной информации вы можете проверить электронный специфичный документы на использование нативных модулей.

2

использование 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
1

Моя личная проблема, касающаяся заголовков узлов и электронов в нативных аддонах, требовала другого значения параметра dist-url:

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

Надеюсь, это кому-нибудь поможет.

PS: до сих пор не могу понять, как установить его с помощью .npmrc в Windows (

1
По вопросам рекламы [email protected]