我是新SHOU一枚,最近在用nodejs做一个上位机软件,通过CH375拿到设备发送过来的数据。厂家给了CH375DLL64.dll,由于nodejs调用dll文件比较麻烦,经过在网上找资料,node-gyp , py2.7 , visual studio , ffi , ref , ref-array 这些库及环境我都安装了。现在有一个问题,我在调用CH375ReadData函数的时候,只返回了true,并没有其他数据,是不是我的写法有问题,麻烦各位da niu
C的函数:
BOOL WINAPI CH375ReadData( // 读取数据块
ULONG iIndex, // 指定 CH375 设备序号或者打开设备的句柄
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
js代码:
const ffi = require('ffi');
const ref = require('ref');
const refArray = require('ref-array');
let pvoid = refArray(ref.types.ulong);
let pulong = refArray(ref.types.ulong);
const libm = ffi.Library('./CH375DLL64.dll', {
'CH375OpenDevice':['long',['long']],
'CH375GetDeviceName':['int',['int']],
'CH375ReadData':['bool',['ulong',pvoid,pulong]],
});
(async ()=>{
let num = 0;
const openRes = await libm.CH375OpenDevice(num);
console.log('返回句柄:' + openRes);
if(openRes != -1){
const bufferRes = await libm.CH375GetDeviceName(num);
console.log('返回缓冲区:' + bufferRes);
try {
libm.CH375ReadData.async(openRes,new pvoid(200),new pulong(200),(err,result)=>{
if(!err){
console.log('返回类型' + result);
}else{
console.log('错误' + result);
}
});
}catch (e) {
console.log('err');
console.log(e);
}
}
})();
返回句柄:624
返回缓冲区:4217344
返回类型true
要拿到设备传回来的数据