使用来自Node.js的包含char数组的struct调用C ++ dll

时间:2016-05-16 14:47:35

标签: c++ node.js pointers node-ffi

我正在使用Node.js ffi插件来调用C ++ DLL。

我遇到的问题是我正在提供的结构 - 它包含一个char数组 - 我不相信我正确设置它。 因此,我无法访问内容。

从C ++头文件中定义Routine:

$data = [
    "employees" => [
        "first_name",
        "departament" => [
            "name"
        ]
    ],
];

Guzzle::get('http://api.project.com/list/', [
    'headers' => [
        'Content-Type' => 'application/json',
    ],
    'json' => $data,
]);

MyConfig 结构在C ++中定义如下:

int GetSysConfig(MyConfig * config);

我对应的Node.js结构定义:

typedef struct{
    int attribute;
    char path[256];
}MyConfig;

注意:下面是我从Node.js调用DLL的地方 - 虽然我错了,但我认为这里没有问题。

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

// This seems to be the problematic part?
var charArray = ArrayType('char');
charArray.length = 256;

var MyConfig = StructType({
    'attribute' : 'int',
    'path' : charArray
})

有谁知道我在哪里出错?

1 个答案:

答案 0 :(得分:0)

对于包含数组的结构:应定义这些结构,并将其大小指定为ArrayType的参数。

例如:

ArrayType('char', 256) 

因此我的问题的解决方法如下:

var MyConfig = StructType({
    'attribute' : 'int',
    'path' : ArrayType('char', 256)
})