使用Node.js中包含char数组的结构调用C++dll
Call C++ dll with struct containing char array from Node.js
我正在使用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));
});
有人知道我哪里做错了吗?
对于包含数组的结构:这些结构的定义应将其大小指定为ArrayType的参数。
例如:
ArrayType('char', 256)
因此,我的问题的解决方案如下:
var MyConfig = StructType({
'attribute' : 'int',
'path' : ArrayType('char', 256)
})
相关文章:
- 没有为自己的结构调用列表推回方法
- 调用 C 文件中的"C++"结构
- C++结构默认调用值
- 在结构外部调用指向函数的指针
- C++结构到德尔福记录dll调用
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- C++ 结构错误"调用'erase'没有匹配函数
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- QT C++,从子层次结构调用 main 中的函数
- 为在与类方法中的类相同的命名空间中定义的结构调用重载运算符
- Eclipse Neon.3 更改类型层次结构/调用层次结构中的颜色
- 使用C#的结构调用C 代码
- 从嵌套结构调用受保护的基类函数
- 使用Node.js中包含char数组的结构调用C++dll
- 节点结构调用自身
- 如何使用结构调用函数 (C++)
- 何时为此结构调用复制构造函数
- 通过结构调用递归函数
- 返回的结构调用它自己的析构函数,用于销毁分配的对象