2015-10-07 15 views
5

Sono completamente nuovo a Node JS ed Electron. Sto cercando di integrare C++ con HTML usando Electron e Node JS. Ho seguito alcuni esempi forniti da: GITChiamare Node Addons Nodo (C++) nell'elettrone

Quello che sto cercando di fare è chiamare la funzione nativa (ciao()) dal javascript della mia pagina web che viene caricata da electron. Ho usato node-gyp configure per generare il mio file di soluzione di Visual Studio. (.sln). E più tardi ho compilato il mio codice con Visual Studio 2013 Express che genera correttamente il mio file .node nella cartella build \ Release.

Questo è il mio file index.js:

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

quando ho semplicemente eseguire questo con node index.js, mi sta dando il risultato desiderato:

world 

Ma il problema è dotato di quando uso Electron. Sto usando electron binary (32 bit) per eseguire la mia pagina web.

Quello che segue è il mio main.js di file:

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; 
    }); 
}); 

Ora, questo è il mio javascript dove sto chiamando l'addon origini:

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

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

Quando ho eseguito questo o caricare questo pagina, ricevo il seguente errore:

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

In seguito è il mio 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 
} 

Questo è il mio binding.gyp:

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

sto correndo lo stesso problema quando si utilizza il --arch = ia32' bandiera 'Quando uso il' - arch = x64' flag Ricevo 'Unchaught Error: Il sistema non riesce a trovare il testo del messaggio per il numero di messaggio 0x% 1 nel file di messaggi per% 2.' Tuttavia, se eseguo il comando con' node./'print out" world "alla riga di comando come previsto, anche lo stesso codice funziona su MacOS in elettrone, quindi sembra essere un problema basato su elettroni di Windows – devonbleibtrey

risposta

2

Sembra che non si può avere il binario corretto configurato. Siamo spiacenti, non sono sicuro se questo funzionerà per il modulo nativo, ma si potrebbe provare rebuilding ...

Nota: Si prega di assicurare di avere gli argomenti corretti per il vostro comando node-Gyp (se è così che si ricostruire) .

  • --target=<your electron version>
  • --target_platform=win32 (Non nel link esempio, ma ti sembra di essere utilizzando le finestre)
  • --arch=<your architecture> (x64 = 64 bit, x86 = 32 bit)
+0

Non ho trovato alcuna struttura di directory di questo tipo nel mio ambiente di sviluppo. per eseguire la mia app – user1636077

+0

Il mio male Non dovrei provare a leggere le domande alle 3. Ho aggiornato la mia risposta – Josh

2

Come ho già detto nel commenti stavo correndo su questo stesso problema. Per risolverlo è necessario aggiungere un paio di flag addizionali:

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

In questo modo ottenere i requisiti corretti dal sito atom.io e costruire l'add-on in modo corretto. Per ulteriori informazioni è possibile controllare lo specifico docs dell'elettrone sull'utilizzo di moduli nativi.

0

utilizzando node-gyp direttamente verrà creato con le intestazioni nodejs, ma l'elettrone ha intestazioni diverse.

Per prima cosa dovresti capire che la versione elettrone della strega sta usando l'elettrone. è possibile scrivere un JS come questo

console.log(process.version); 

uso di elettroni per eseguire questo script, la mia versione è 0.36.1 e il cambiamento di directory per il modulo che si vuole costruire

#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

mio problema personale per quanto riguarda nodo vs intestazioni elettroni in addons nativi richiesto un diverso valore di parametro dist-url:

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

auguro che possa aiutare qualcuno.

PS:. Ancora non riesco a capire come impostare utilizzando .npmrc in finestre (

+0

Metti questo nel tuo .npmrc nella cartella radice del progetto '' 'runtime = electron \ n target_arch = x64/x86 \ n target = 1.7.9 \ n disturl = https://atom.io/download/atom- shell \ n progress = true''' – niketan

+0

@niketan, ma allora come vorrei costruire per l'architettura alternativa? Cambia il file ogni volta? – Konstantin