首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C++调用包含char数组的结构的Node.js dll

从C++调用包含char数组的结构的Node.js dll
EN

Stack Overflow用户
提问于 2016-05-16 14:47:34
回答 1查看 1.4K关注 0票数 5

我使用Node.js 费伊插件来调用C++ DLL。

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

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

代码语言:javascript
复制
int GetSysConfig(MyConfig * config);

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

代码语言:javascript
复制
typedef struct{
    int attribute;
    char path[256];
}MyConfig;

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

代码语言:javascript
复制
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调用动态链接库的地方--我认为这里没有问题,尽管我可能错了。

代码语言:javascript
复制
// 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));
});

有人知道我哪里出了问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 16:04:50

对于包含数组的结构:应该将它们的大小指定为ArrayType的参数。

例如:

代码语言:javascript
复制
ArrayType('char', 256) 

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

代码语言:javascript
复制
var MyConfig = StructType({
    'attribute' : 'int',
    'path' : ArrayType('char', 256)
})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37256751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档