我使用node-ffi来加载.dll
lib,并使用ref,ref-struct,ref-array定义c ++数据类型。我发现uint8_t
数组无法转换为字符串。
例如:
var ffi = require('ffi');
var ref = require('ref');
var struct = require('ref-struct');
const refArray = require('ref-array')
C ++中的_VCI_BOARD_INFO_EX参数(未用node.js编写):
typedef struct _VCI_BOARD_INFO_EX{
uint8_t ProductName[32];
}
定义_VCI_BOARD_INFO_EX结构:
var VCI_BOARD_INFO_EX = struct({
ProductName: refArray(ref.types.uint8, 32)
})
打开lib.dll:
const dll = ffi.Library('./lib.dll', {
VCI_ReadBoardInfoEx: ['int', [ref.types.uint32, ref.refType(VCI_BOARD_INFO_EX)]]
})
调用VCI_ReadBoardInfoEx库:
let str = ref.alloc(VCI_BOARD_INFO_EX);
let borInfo = dll.VCI_ReadBoardInfoEx(0,str);
console.log(JSON.stringify(str.deref()));
显示控制台:
{"ProductName":[71,105,110,107,103,111,95,85,83,66,95,67,65,78,95,65,100,97,112,116,111,114,0,0,0,0,0,0,0,0,0,0]}
ProductName
得到一个int
数组,在正确的情况下,它是一个字符串。