0

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 は、受信したすべてのデータをデバッグ ファイルに書き込みます。入力オブジェクトで渡されたデータ値が間違った位置に挿入され、出力オブジェクトの値を読み取ることができません。

どこが間違っているのですか?

4

1 に答える 1

0

少し遅いですが...ここに私が見つけたものがあります。

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'

また、null ターミネータを処理する必要があるかもしれません。

その他の例はこちら.

于 2016-08-28T23:43:44.293 に答える