Ich bin völlig neu in Node JS und Electron. Ich versuche C++ mit HTML zu verbinden, indem ich Electron und Node JS benutze. Ich habe ein paar Beispiele gegeben durch: GITCalling Node Native Addons (C++) in Elektron
Was ich versuche zu tun, ruft die native Funktion (Hallo()) von meiner Webseite Javascript, die von Elektronen geladen wird. Ich habe node-gyp configure
verwendet, um meine Visual Studio-Lösungsdatei zu generieren. (.sln). Und später kompilierte ich meinen Code mit Visual Studio 2013 Express, der erfolgreich meine .node Datei in Build \ Release Folder generiert.
Das ist meine index.js Datei:
var addon = require('./build/Release/hello.node');
console.log(addon.hello());
, wenn ich das einfach laufen mit node index.js
, es mir den gewünschten Ausgang geben:
world
Aber das Problem kommt mit wenn ich Elektron. Ich benutze Elektronenbinär (32 Bit), um meine Webseite zu betreiben.
Hier finden Sie meine main.js Datei:
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;
});
});
Nun ist dies mein Javascript, wo ich das native Addon bin Aufruf:
//************* My Functional logic **************
//************************************************
var addon = require('../build/Release/hello');
alert(addon.hello());
Wenn ich diese ausführen oder diese laden Seite, erhalte ich den folgenden Fehler:
Uncaught Error: %1 is not a valid Win32 application. ATOM_SHELL_ASAR.js:137
C:\Users\Administrator\Desktop\MyAPP\build\Release\hello.node
Folgen ist mein 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
}
Das ist mein binding.gyp
:
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ],
"include_dirs": [
"<!(node -e \"require('nan')\")"
]
}
]
}
Ich bin in der gleichen Ausgabe läuft, wenn die '--arch = ia32' Flag verwendet Wenn ich die' verwenden - arch = x64 'flag Ich empfange 'Uncaught Error: Das System kann keinen Nachrichtentext für die Nachrichtennummer 0x% 1 in der Nachrichtendatei für% 2 finden. Wenn ich jedoch den Befehl mit' node./'ausführe, wird" world "ausgedruckt "Die Befehlszeile wie erwartet. Auch der gleiche Code funktioniert auf MacOS in Elektron, scheint also ein Windows-Elektron-basiertes Problem. – devonbleibtrey