未捕获的错误:电子中的错误1114

时间:2017-05-16 08:55:49

标签: c++ node.js npm electron native

我正在使用原生C ++在电子上制作一个简单的hello world应用程序,但是会出现Uncaught Error : error 1114错误。这个错误特别是当项目在Windows上运行时,而它在Fedora上运行良好。

Uncaught Error : error 1114 in electron

package.json

{
    "name": "nodec",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "start": "electron ."
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "electron-packager": "^8.7.0"
    }
}

binding.gyp

{
    "targets": [
        {
            "target_name": "addon",
            "sources": [ "addon.cc" ]
        }
    ]
}

addon.cc

#include <node.h>
namespace demo {
using v8::Exception;
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Number;
using v8::Object;
using v8::String;
using v8::Value;

void hello(const FunctionCallbackInfo& args) {
Isolate* isolate = args.GetIsolate();

args.GetReturnValue().Set(String::NewFromUtf8(isolate,"world"));
}

void Init(Local exports) {
NODE_SET_METHOD(exports, "hello", hello);
}

NODE_MODULE(addon, Init)
}

main.js

const addon = require('./build/Release/addon');
console.log('This should be eight:', addon.hello());

index.html

<title>My C++ App</title> Hello <script> require('./main.js') </script>

我已多次配置和构建项目,但在这种情况下似乎没有帮助。

1 个答案:

答案 0 :(得分:2)

首先,您的代码中存在一些缺陷:

  • addon.ccFunctionCallbackInfoLocal必须包含模板参数。更正的功能签名包括:
void hello(const FunctionCallbackInfo<Value>& args)
void Init(Local<Object> exports)
  • package.json:您的入口点应为
"main": "main.js",

其次,您必须按照guide中的说明专门为electron构建您的插件。例如,将其构建为最新的electron版本(1.4.13),请使用以下命令:

node-gyp configure build --target=1.4.13 --arch=x64 --dist-url=https://atom.io/download/electron

(根据您的平台--arch标记)

在所有这些之后,它与

成功运行
npm run start

This should be eight: world打印到控制台

由于您未在代码中的任何位置使用index.html - 尽管您的目标可能是在那里打印 - 但您可以尝试这些改进的main.jsindex.html

const { app, BrowserWindow } = require('electron')
const path = require('path')

app.once('ready', () => {
  new BrowserWindow().loadURL(path.join(__dirname, 'index.html'))
})
<html>
  <head>
    <title>My C++ App</title>
  </head>
  <body>
    <div>
      <h1>
        Hello 
        <script>document.write(require('./build/Release/addon').hello())</script>
      </h1>
    </div>
  </body>
</html>

结果在浏览器窗口中显示Hello world