我使用Node.js 费伊插件来调用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调用动态链接库的地方--我认为这里没有问题,尽管我可能错了。
// 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));
});有人知道我哪里出了问题吗?
发布于 2016-06-15 16:04:50
对于包含数组的结构:应该将它们的大小指定为ArrayType的参数。
例如:
ArrayType('char', 256) 因此,解决我的问题的方法如下:
var MyConfig = StructType({
'attribute' : 'int',
'path' : ArrayType('char', 256)
})https://stackoverflow.com/questions/37256751
复制相似问题