调用身份证模块 函数声明:__int16 IDCard_ReadCard(HANDLE icdev,char* message); 入口参数:icdev: 通讯标识符 出口参数:message: 返回的操作信息(长度在 8 到 18 之间,定义时字节长度要大于 18 )
ELECTRON: 8.0.0 NODEJS: 12.18.0
** ffi 文档里面把 出参的 char*定义成 string,于是我这样定义 **
IDCard_ReadCard: ['int', ['int', 'string']]
** 调用 **
const readMsgBuf = new Buffer(60);
const rs = this.$idcard.IDCard_ReadCard(dev, readMsgBuf)
然而会报错
[ERR_ASSERTION]: expected a "string" as the third argument
然后也再网上搜了下其他的方案
如声明成
IDCard_ReadCard: ['int', ['int', 'char *']]
虽然不报错了,但是不能获取返回值
还有一些其他的,都不能获取到数据,请了解这个的道友指导一下,不甚感激
1
zhuweiyou 2020-07-03 11:25:23 +08:00
没用 node 调过 DLL,因为值传递的原因,你这样并不能改变 readMsgBuf 。
以我用 java 调 DLL 的经验来说,这种情况一般传 byte[] 数组。 |
3
ysc3839 2020-07-03 11:33:35 +08:00
|
5
ysc3839 2020-07-03 19:33:20 +08:00 via Android
@liangzimo 我完全没研究过 Electron……只是根据你的问题搜索了一下,感觉这个应该符合你的需求。至于要代码的话我就帮不了你了。
|
7
magicdawn 2020-07-07 11:49:04 +08:00
这有一模一样的实例 https://github.com/node-ffi/node-ffi/wiki/Node-FFI-Tutorial#output-parameters
void get_md5_string(char *out_string); |
9
kevinBon 2021-07-22 14:11:51 +08:00
你好,请问这个 dll 的函数 里面的 HANDLE 具体是什么类型,ffi-napi 要用什么类型去接收,和传入参数的?
HANDLE 可以用 long 进行接收吗? let device = ffi.Library(pathUtil.getAppResourcePath('DK-4H1/QSApi'), { QS_Device_Open: ['long', [ref.types.int16, 'long']] }) HANDLE __stdcall QS_Device_Open(__int16 Port,long Baud); var int16_with_100 = ref.alloc(ref.types.int16, 100) var openResult = device.QS_Device_Open(int16_with_100,1) |