Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从NodeJs调用C库_C_Node.js_Node Ffi - Fatal编程技术网

从NodeJs调用C库

从NodeJs调用C库,c,node.js,node-ffi,C,Node.js,Node Ffi,有谁能帮我解决一个有关nodejs和C库调用某些dll方法的问题吗 我的dll有以下方法: void Open(char *Path); int Execute(TINData *InData,TOUData *OutData); void Close(void); 使用这些数据结构: typedef struct { char Value[8+1]; char Type [1+1]; int Id; unsigned char Parity;

有谁能帮我解决一个有关nodejs和C库调用某些dll方法的问题吗

我的dll有以下方法:

void Open(char *Path);
int Execute(TINData *InData,TOUData *OutData);
void Close(void);
使用这些数据结构:

typedef struct {
      char Value[8+1];
      char Type [1+1];
      int Id;
      unsigned char Parity;
} TINData

typedef struct {
      char Cash[8+1];
      char Telephone[11+1];
      char CallType[3+1];
      char CallResult[2+1];
      char Description[24+1];
} TOUTData
我的nodejs代码:

var ffi = require('ffi');
var ref = require('ref');
var StructType = require('ref-struct');



var TINData = StructType({
      'Value': 'string',
      'Type': 'string',
      'Id': 'int',
      'Parity': 'string'
});

var TOUTData = StructType({
      'Cash': 'string',
      'Telephone': 'string',
      'CallType': 'string',
      'CallResult': 'string',
      'Description': 'string'
});




var mylibrary = ffi.Library('OurLib.dll', {
      'Open' : ['void', ['string']],
      'Execute' : ['void', [TINData, TOUTData]],
      'Close' : ['void', ['void']]
});

myLibrary.Open('myConnection');

var myTINData = new TINData();           
myTINData.Value = '00000010';
myTINData.Type = '1';
myTINData.Id = 123;
myTINData.Parity = '0';



 var myTOUTData = new TOUTData();
    var i = mylibrary.Execute(myTINData, myTOUTData);

    myLibrary.Close();
我的dll将所有接收到的数据写入调试文件,我看到输入对象传递的数据值被插入错误的位置,并且我无法读取输出对象的值


我哪里出错了?

有点晚了,但是。。。这是我发现的

var ArrayType = require('ref-array')
TINData的声明可以如下所示:

var TINData = Struct({
      'Value': ArrayType('char', 9),
      'Type': ArrayType('char', 3),
      'Id': 'int',
      'Parity': 'uchar'
});
对于TOUTData:

var TOUTData = Struct({
      'Cash': ArrayType('char', 9),
      'Telephone': ArrayType('char', 12),
      'CallType': ArrayType('char', 4),
      'CallResult': ArrayType('char', 3),
      'Description': ArrayType('char', 25),
});
您也可以使用“uchar”代替“char”

也许你需要处理空终止符

更多的例子