在Electron中使用自定义节点包
我正在尝试使用我在Electron应用程序中编写的自定义节点包,但在初始化生成的DLL/Node包时遇到了问题。当我启动电子应用程序时,我收到以下错误:
Uncaught Error: A dynamic link library (DLL) initialization routine failed.
要链接的DLL是一个用C++编写的简单库,它有一个函数,该函数接受双精度值作为输入,然后简单地将其加一,返回结果。要构建C++库,我使用swg(http://www.swig.org/)和node-gyp,命令如下:
swig -c++ -javascript -node ./src/mace_api.i
node-gyp clean configure build
mace_api是我试图构建的包。Mace_api.i、binding.gyp文件和我的库的源文件的定义如下:
mace_api.i
%module MaceAPI
%{
#include "./mace_api.cpp"
%}
%include <windows.i>
%include "./mace_api.h"
binding.gyp
{
"targets": [
{
"target_name": "mace-api",
"sources": [ "./src/mace_api_wrap.cxx" ]
}
]
}
mace_api.h
#ifndef MACE_API_H
#define MACE_API_H
#include <iostream>
#include <functional>
using namespace std;
class MaceAPI
{
public:
MaceAPI();
double addOne(double input);
};
#endif // MACE_API_H
mace_api.cpp
#include "mace_api.h"
MaceAPI::MaceAPI()
{
}
double MaceAPI::addOne(double input)
{
double ret = input + 1.0;
return ret;
}
Swg获取C++源文件,并基本上编写了一个包装器,在本例中,它可以由node-gyp用来构建一个Node包。有没有人尝试过在电子应用程序中使用以这种方式构建的自定义节点模块?我是不是错过了SWIG如何为我的C++库生成包装器,或者Electron如何处理定制的节点包?我可以将图书馆与Node链接,但不能与Electron链接。如有任何帮助,我们将不胜感激。
为完整起见,以下是我尝试在电子应用程序中包含和使用我的包的方式:
var libMaceTest= require('mace-api/build/Release/mace-api');
var test = new libMaceTest.MaceAPI();
console.log(test.addOne(5));
解决方案
您是否已签出https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md#manually-building-for-electron
具体来说,
手动生成电子
如果您是开发本机模块的开发人员,并且希望对其进行测试 与Electron对抗,您可能想要为Electron重建模块 手工操作。您可以直接使用node-gyp为Electron构建:
cd /path-to-module/ HOME=~/.electron-gyp node-gyp rebuild
--target=1.2.3 --arch=x64 --dist-url=https://atom.io/download/atom-shell
home=~/.Electronics-gyp更改在哪里可以找到开发头文件。 这个 --Target=1.2.3是Electron的版本。--dist-url=...指定下载标头的位置。Arch=x64表示模块已构建 适用于64位系统。
相关文章