首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NodeJs调用C库

从NodeJs调用C库
EN

Stack Overflow用户
提问于 2015-09-24 21:03:03
回答 1查看 411关注 0票数 0

有人能帮我解决nodejs和C库(调用一些dll方法)的问题吗?

我的dll有以下方法:

代码语言:javascript
复制
void Open(char *Path);
int Execute(TINData *InData,TOUData *OutData);
void Close(void);

使用这些数据结构:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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将所有接收到的数据写入到一个调试文件中,我看到通过输入对象传递的数据值被插入到错误的位置,并且我无法读取输出对象的值。

我哪里错了?

EN

回答 1

Stack Overflow用户

发布于 2016-08-29 07:43:44

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

代码语言:javascript
复制
var ArrayType = require('ref-array')

TINData的声明可以是这样的:

代码语言:javascript
复制
var TINData = Struct({
      'Value': ArrayType('char', 9),
      'Type': ArrayType('char', 3),
      'Id': 'int',
      'Parity': 'uchar'
});

而对于TOUTData:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32762089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档