如何初始化 struct node-ffi struct
how to initialize struct node-ffi struct
我在 linux 上有图书馆。
那个图书馆有结构。
该库的手册说必须初始化结构,如下所示:
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
lUserID = NET_DVR_Login_V30("192.168.1.64", 8000, "admin", "12", &struDeviceInfo);
struDeviceInfo — 从设备输出数据,我必须阅读和使用。
我如何在 Nodejs 中对此进行编码。
PS: 我使用 node-ffi 模块,库初始化并连接到设备完成正常。
var net = require('net');
var events = require('events');
var util = require('util');
var request = require('request');
var xml2js = require('xml2js');
var ffi = require("ffi");
var ref = require("ref");
var ref_struct = require("ref-struct");
var libHikSDK = ffi.Library('./libhcnetsdk.so', {
'NET_DVR_Init': ['bool', []],
'NET_DVR_SetConnectTime': ['bool', ['char', 'char']],
'NET_DVR_SetReconnect': ['bool', ['char', 'bool']],
'NET_DVR_Login_V30': ['char', ['string', 'int', 'string', 'string']],
'NET_DVR_Cleanup': ['void', []],
'NET_DVR_GetLastError': ['char', []],
'NET_DVR_GetSDKVersion': ['char',[]],
'NET_DVR_SetLogToFile': ['bool',['int', 'string']]
});
libHikSDK.NET_DVR_Cleanup();
var init = libHikSDK.NET_DVR_Init();
var v = libHikSDK.NET_DVR_GetSDKVersion();
var s = libHikSDK.NET_DVR_SetConnectTime('200000', '1');
libHikSDK.NET_DVR_SetLogToFile(3, "/home/user");
var i = libHikSDK.NET_DVR_Login_V30("192.168.0.10", 8000, "admin", "12345");
var g = libHikSDK.NET_DVR_GetLastError();
您可以使用ref-struct
定义NET_DVR_DEVICEINFO_V30
结构,然后像这样调整函数定义:
const NetDvrDeviceInfoV30 = StructType({...});
const libHikSDK = ffi.Library('./libhcnetsdk.so', {
...
'NET_DVR_Login_V30': ['char', ['string', 'int', 'string', 'string', NetDvrDeviceInfoV30]],
...
});
const netDvrDeviceInfoV30 = new NetDvrDeviceInfoV30();
const i = libHikSDK.NET_DVR_Login_V30("192.168.0.10", 8000, "admin", "12345", netDvrDeviceInfoV30);
我在 linux 上有图书馆。 那个图书馆有结构。 该库的手册说必须初始化结构,如下所示:
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
lUserID = NET_DVR_Login_V30("192.168.1.64", 8000, "admin", "12", &struDeviceInfo);
struDeviceInfo — 从设备输出数据,我必须阅读和使用。
我如何在 Nodejs 中对此进行编码。
PS: 我使用 node-ffi 模块,库初始化并连接到设备完成正常。
var net = require('net');
var events = require('events');
var util = require('util');
var request = require('request');
var xml2js = require('xml2js');
var ffi = require("ffi");
var ref = require("ref");
var ref_struct = require("ref-struct");
var libHikSDK = ffi.Library('./libhcnetsdk.so', {
'NET_DVR_Init': ['bool', []],
'NET_DVR_SetConnectTime': ['bool', ['char', 'char']],
'NET_DVR_SetReconnect': ['bool', ['char', 'bool']],
'NET_DVR_Login_V30': ['char', ['string', 'int', 'string', 'string']],
'NET_DVR_Cleanup': ['void', []],
'NET_DVR_GetLastError': ['char', []],
'NET_DVR_GetSDKVersion': ['char',[]],
'NET_DVR_SetLogToFile': ['bool',['int', 'string']]
});
libHikSDK.NET_DVR_Cleanup();
var init = libHikSDK.NET_DVR_Init();
var v = libHikSDK.NET_DVR_GetSDKVersion();
var s = libHikSDK.NET_DVR_SetConnectTime('200000', '1');
libHikSDK.NET_DVR_SetLogToFile(3, "/home/user");
var i = libHikSDK.NET_DVR_Login_V30("192.168.0.10", 8000, "admin", "12345");
var g = libHikSDK.NET_DVR_GetLastError();
您可以使用ref-struct
定义NET_DVR_DEVICEINFO_V30
结构,然后像这样调整函数定义:
const NetDvrDeviceInfoV30 = StructType({...});
const libHikSDK = ffi.Library('./libhcnetsdk.so', {
...
'NET_DVR_Login_V30': ['char', ['string', 'int', 'string', 'string', NetDvrDeviceInfoV30]],
...
});
const netDvrDeviceInfoV30 = new NetDvrDeviceInfoV30();
const i = libHikSDK.NET_DVR_Login_V30("192.168.0.10", 8000, "admin", "12345", netDvrDeviceInfoV30);