electron作为前端入侵桌面端框架,看中得就是前端上手快功能全面,桌面端必不可少得就是调用系统或者第三方动态链接库(不管是c,c++,vb,Delphi生成得DLL)。这些场景很常见,比如打印机得无感知打印,身份证读卡器,支付POS机等等。就目前我做得打印机调用(得实小票、卡片,美松小票)和身份证读卡器,八达通支付等讲下electron调用DLL实战。
其实说electron调用dll实际就是nodejs得调用,网上有很多node-ffi得使用。node-ffi是一个用于使用纯JavaScript加载和调用动态库的Node.js插件。它可以用来在不编写任何C ++代码的情况下创建与本地DLL库的绑定。同时它负责处理跨JavaScript和C的类型转换。但是node-ffi对本地环境要求非常高,可能你开发一小时,这环境配置要搞几天时间。首先你要安装 python 2.x,然后安装 node-gyp,这都很简单,接下来就是重点,安装vs2015或者2017,安装好之后发现还是有问题,于是按照网上得安装 windows-build-tools还是不行,这是你会发现你完全按照网上安装步骤,最后结果是没见过得报错,从安装到放弃。不过也有成功得,我在几经波折也算安装成功。
第二个方式就是ffi-napi。ffi-napi则稳定多了,你要安装python 2.7,node-gyp,windows-build-tools,看起来和上面差不多,其实也就是差不多,只不过这个插件牛人已经解决冲突和兼容问题,这时你发现这样就可以了。公司其他员工开发不必纠结环境问题了。
接下来你会遇到另一个问题,举例来说,比如c语言,你就要做js到c得类型转换得。如果这个问题不解决无法走下去这是也有插件ref-napi,ref-array-napi,ref-struct-napi,这些都能搜到,特别主要得是,c++要用wchar_t时,你要用ref-wchar-napi
void ref.types.void
int ref.types.int32
char ref.types.char
bool ref.types.bool
double ref.types.double
short ref.types.short
char* string
int* ref.refType(ref.types.int32)
int[] ArrayType(int)
其他得都类比,有问题可以探讨