c++ - 使用包含来自 Node.js 的 char 数组的结构调用 C++ dll

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

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

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

C++ 头文件中例程的定义:

int GetSysConfig(MyConfig * config);

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

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

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

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
})

注意:下面是我从 Node.js 调用 DLL 的地方 - 我不认为这里有问题,尽管我可能是错的。

// Create a pointer to the config - we know we expect to supply this to the C++ routine.
var myConfigPtr  = ref.refType(MyConfig);

var lib = ffi.Library('my.dll', {
 "GetSysConfig": ["int", [myConfigPtr]]
});

var myConfigObj = new MyConfig();

lib.GetSysConfig.async(myConfigObj.ref(), function(err, res) {
    console.log("attribute: " + myConfigObj.attribute);
    // This is always empty [] - when it shouldn't be.
    console.log("path: " + JSON.Stringify(myConfigObj.path));
});

有谁知道我哪里做错了吗?

最佳答案

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

例如:

ArrayType('char', 256) 

因此我的问题的修复如下:

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

关于c++ - 使用包含来自 Node.js 的 char 数组的结构调用 C++ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256751/

相关文章:

node.js - 适用于 NodeJS 的 Firebase 动态链接构建器 API

angularjs - 蓝点表示 react 谷歌地图中的当前位置

c - 左值需要作为函数指针赋值的左操作数

C++ 递归指针函数调用

c++ - 从具有默认参数的类模板继承

c++ - 同一程序每次返回不同的输出?

c++ - 来自西门子的日期和时间

javascript - 在 Nodejs Express 应用程序中单击按钮时启动/停止 cronjob

c++ - 从指针获取值

c++ - '&buf_pool->watch[0]' 的语法含义是什么?