首页 > Personal > H5 > electron 通过nodejs native addon调用第三方dll
2016
07-24

electron 通过nodejs native addon调用第三方dll

之前的 electron 调用nodejs native c++ addon说明了如何调用nodejs native addon,现在来说下如何通过nodejs native addon调用第三方的dll。

先来创建一个测试dll,
在vs2015中新建项目,选择virsual C++->Win32->Win32控制台应用程序,确定,
应用程序类型选择DLL,附加选项选择导出符号,完成。因为electron我用的是x64编译,dll也选择x64平台。
因为会用到dll中的类,所以调用dll会采用添加.h和.lib的方式调用dll,如果只调用函数的话可以使用LoadLibrary、GetProcAddress、FreeLibrary来调用,这里就不复述了。
添加测试类和测试函数,就不多说了,可以在
https://github.com/wy182000/nodejs_native_addon_testdll下载代码。

拷贝testdll.h、testdll.dll、testdll.lib到上一文章中创建的nodejs native addon中,
修改hello.cc
#include <node.h>
#include <v8.h>
#include “testdll.h”

using namespace v8;
#pragma comment(lib, “testdll.lib”)

void Method(const v8::FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
Local value = String::NewFromUtf8(isolate, ” nodejs native hello world \n”);
value = String::Concat(value, String::NewFromUtf8(isolate, CHello::Hello()));
value = String::Concat(value, String::NewFromUtf8(isolate, func_hello()));
args.GetReturnValue().Set(value);
}

void Init(Handle<Object> exports) {
Isolate* isolate = Isolate::GetCurrent();
exports->Set(String::NewFromUtf8(isolate, “hello”),
FunctionTemplate::New(isolate, Method)->GetFunction());
}

NODE_MODULE(hello, Init)

修改binding.gyp
{
“targets”: [
{
“target_name”: “hello”,
“sources”:[ “hello.cc” ],
“libraries”: [],
“conditions”: [
[
“OS==’win'”,
{
“link_settings”: {
“libraries”: [
“-l../testdll.lib”,
]
}
}
]
]
}
]
}

编译并运行
npm install
node-gyp configure build
npm run start

相关代码可以在https://github.com/wy182000/nodejs_native_addon_call_testdll下载。

接下来把项目文件夹改名为hello放入electron项目的node_modules文件夹中,并把testdll.dll拷贝到electron项目文件夹下,
修改hello文件下的hello.js
并修改hello.js
var addon = require(‘bindings’)(‘hello.node’);

exports.hello = function () {
return addon.hello();
}
进入node_modules\hello文件夹,重新使用electron 编译项目(如果使用默认编译的.node文件,electron可以运行,但是会提示dll 错误)
node-gyp rebuild –target=1.2.8 –arch=x64 –dist-url=https://atom.io/download/atom-shell
上篇文章有说明过electron的编译,这里就不说了。

编译好以后,修改electron项目的index.html,在范围内添加

npm install
npm run start
运行就可以查看显示内容了。

相关代码可以在https://github.com/wy182000/electron_nodejs_native_addon_call_testdll下载。

PS:
和之前一样,如果npm下载过慢或者现在失败,使用cnpm替代。
使用electron-packager打包的话dll并不会自动拷贝到打包文件夹中,需要手动拷贝。

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。