2015-09-24 76 views
0

任何人都可以幫助我解決nodejs和C庫(調用某些dll方法)的問題?從NodeJs調用C庫

我的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寫入所有接收到的數據到一個調試文件我發現通過輸入對象傳遞的數據值被插入錯誤的位置,我無法讀取值輸出對象。

我在哪裏出錯?

回答

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'

也許你將需要處理空終止符。

更多示例here