使用包含来自 Node.js 的 char 数组的结构调用 C++ dll
Posted
技术标签:
【中文标题】使用包含来自 Node.js 的 char 数组的结构调用 C++ dll【英文标题】:Call C++ dll with struct containing char array from Node.js 【发布时间】:2016-09-12 09:50:38 【问题描述】:我正在使用 Node.js ffi 插件来调用 C++ DLL。
我遇到的问题是我提供的结构 - 它包含一个 char 数组 - 我不相信我设置正确。 结果我无法访问内容。
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));
);
有谁知道我哪里出了问题?
【问题讨论】:
【参考方案1】:对于包含数组的结构体:这些结构体应在定义时将其大小指定为 ArrayType 的参数。
例如:
ArrayType('char', 256)
因此,我的问题的解决方法如下:
var MyConfig = StructType(
'attribute' : 'int',
'path' : ArrayType('char', 256)
)
【讨论】:
以上是关于使用包含来自 Node.js 的 char 数组的结构调用 C++ dll的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node.js 解析不包含 JSON 对象的 JSON 数组
如何使用 mongodb (node.js) 在集合中创建一个包含所有值的数组