2015-07-03 42 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

相关问题