2015-07-03 44 views
1

我試圖爲一個字符串數組傳遞給使用FFI我的C函數作爲無法傳遞字符串數組內部結構使用FFI

var ffi = require('ffi'); 
var ref=require('ref'); 
var ArrayType = require('ref-array'); 
var Struct = require('ref-struct'); 

var StringArray = ArrayType('string'); 
var myStructure=Struct({ 
'ulonglong' : ref.types.ulonglong, 
'charptrptr' : StringArray, 
'stringArr' : StringArray 
}); 

var structObjNew=new myStructure(); 
structObjNew.ulonglong=123456; 
structObjNew.charptrptr=["sample","ptrptr"]; 
structObjNew.stringArr=["sample1","ptrptr1"]; 

var libfactorial = ffi.Library('./stringArray', { 
'readArray': [ 'string', [ myStructurePtr]] //creating header definition 
}); 

var output=libfactorial.readArray(structObjNew.ref()); 

.C文件爲上述代碼

struct myStructure 
{ 
    unsigned long long ulonglong; 
    char **charptrptr; 
    char stringArr[3][10]; 
}; 
EXPORT char* readArray(struct myStructure *nameofstr) { 
    printf("Value from first param from structure of type char**\n"); 
    printf("%s\n",nameofstr->charptrptr[0]); 
    printf("%s\n",nameofstr->charptrptr[1]); 

    printf("value form second param from structure of thype char[][]\n"); 
    printf("%s\n",nameofstr->stringArr[0]); 
    printf("%s\n",nameofstr->stringArr[1]); 
} 
C函數

我正在輸出像:

  • 第一PARAM從char**類型的結構中的值

    樣品:ptrptr

  • 第二PARAM從類型的結構char[][]

    像▲任何垃圾值é┌

即值當我傳遞一個數組到char**類型,然後我得到一個正確的輸出,但是當我試圖將其傳遞給char*[]char[][]格式在結構內聲明時,我得到一個垃圾值。

但直接傳遞字符串數組像["aa","bb"]char*[]參數在C中工作正常。當我在結構中使用它時,它不適用於我。

回答

0

你的第二個數組有一個固定的字符大小。

這給一試:

var CharArray10 = ArrayType('char', 10) 
var StringArray3 = ArrayType(CharArray10, 3) 

var myStructure = Struct({ 
    'ulonglong' : ref.types.ulonglong, 
    'charptrptr' : StringArray, 
    'stringArr' : StringArray3 
}); 

更多的例子here