gpt4 book ai didi

从 NodeJs 调用 C 库

转载 作者:行者123 更新时间:2023-11-30 17:10:44 25 4
gpt4 key购买 nike

谁能帮我解决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'

也许您需要处理空终止符。

更多示例 here .

关于从 NodeJs 调用 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32762089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com