2017-10-22 8 views
0

私はlinuxにライブラリを持っています。 そのライブラリに構造体があります。このライブラリの マニュアルは、構造体はこのように、初期化されなければならないと述べている:struct node-ffi structを初期化する方法

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(); 

答えて

0

あなたはNET_DVR_DEVICEINFO_V30構造を定義するためにref-structを使用して、次のように関数の定義を調整することができます。

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); 
関連する問題