博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Electron使用NodeJS扩展模块调用DLL
阅读量:2390 次
发布时间:2019-05-10

本文共 1840 字,大约阅读时间需要 6 分钟。

在windows平台,用vs2015开发一个最简单的dll.

由于安装的electron是64位的,所以需要配置编译生成64位的DLL。

把生成的FaceRecognition.dll拷贝到electron应用的目录。

把FaceRecognition.h和FaceRecognition.lib拷贝到nodejs扩展模块的目录。

如果采用LoadLibary这种方式,那就不需要链接lib文件了。

最终的目录结构如下

修改扩展模块的源代码

#include 
#include
#include
#include "FaceRecognition.h"#pragma comment(lib, "FaceRecognition.lib")using v8::FunctionCallbackInfo;using v8::Isolate;using v8::Local;using v8::Object;using v8::String;using v8::Value;void CAMOpen(const FunctionCallbackInfo
& args) { Isolate* isolate = args.GetIsolate(); char pIn[20]; char pOut[50]; int result = CAM_Open(pIn, pOut); //调用DLL char buf[10] = {'\0'}; itoa(result, buf, 10); Local
value = String::NewFromUtf8(isolate, "cam_open return "); value = String::Concat(value, String::NewFromUtf8(isolate, buf)); args.GetReturnValue().Set(value);}void init(Local
exports) { NODE_SET_METHOD(exports, "CAMOpen", CAMOpen);}NODE_MODULE(FaceRecognition, init)
修改binding.gyp

{  "targets": [    {      "target_name": "facerecognitiondll",      "sources": [ "FaceRecognition.cpp" ],      "libraries": [],      "conditions": [        [            "OS == 'win'",            {                "link_settings": {                    "libraries": ["-l ../facerecognition.lib",]                }            }        ]      ]    }  ]}
模块的package.json定义如下

{  "name": "facerecognitiondll",  "version": "1.0.0",  "description": "",  "main": "main.js",  "scripts": {    "install": "node-gyp rebuild -target=1.6.11 -arch=x64 -dist-url=https://atom.io/download/atom-shell"  },  "author": "",  "license": "ISC",  "gypfile": true}

编译生成模块

npm install

在electron项目中运行npm start,结果如下

小结:

1.开发一个dll,项目名为FaceRecognition

2.开发一个NodeJS的第三方扩展模块,这个模块调用第一步的DLL,相当于做了一层封装。

3.开发一个Electron应用,调用第二步生成的模块,相当于间接调用了第一步的DLL。

你可能感兴趣的文章
使用awr来诊断数据库性能问题
查看>>
exp-00056 exp-00000 导出终止失败的处理
查看>>
oracle impdp network_link直接导入数据报ora-39064 ora-29285
查看>>
oracle 11g rac asm ORA-15064错误
查看>>
Oracle ASM Disk Header
查看>>
Oracle ASM Disk Directory
查看>>
Oracle 12C 跨网络传输数据库
查看>>
Oracle 12.2使用dbms_redefinition.redef_table过程来重定义表的存储属性
查看>>
Oracle 12c full transportable export & import
查看>>
Oracle 12CR2 RAC ORA-01033
查看>>
Oracle 12C ORA-12545 While Connecting to RAC through SCAN Name
查看>>
Oracle 12cr2 数据库之间跨网络传输表,分区或子分区
查看>>
Oracle 12CR2 dbca -silent -createDatabase
查看>>
Oracle OER 7451 in Load Indicator : Error Code = OSD-04500的问题处理
查看>>
Oracle使用联机重定义来给表增加新列与分区
查看>>
Oracle Linux 7使用cron来管理Oracle ASM审计文件目录的增长
查看>>
Connecting To 12CR2 RAC Pluggable Database With ORA-1033
查看>>
Oracle 12.2使用对象数据类型来重定义表
查看>>
重命名与迁移联机数据文件
查看>>
Oracle 12c RMAN Cross-Platform Transport of a Closed PDB
查看>>