ffi-napi 如何接受包含 char 数组的结构作为返回类型?

问题描述

我正在将回调传递给 C++ 中的函数。此回调必须接受在 C++ 代码中定义的包含字符数组的结构。

我查看了 Call C++ dll with struct containing char array from Node.js,它讨论了如何将包含 char 数组的结构传递给外部 C++ 函数。但是,我正在努力接受来自外部 C++ 函数的相同性质的结构。

结构体定义为:

struct Info {
  long ID;
  char chName[128];
};

这是我的 JavaScript 代码

var StructType = require('ref-struct-napi');
var ArrayType = require('ref-array-napi');

var Info = StructType({
    'ID' : 'long','chName' : ArrayType('char',128) 
});

var ffi = require('ffi-napi');

var lib = ffi.DynamicLibrary('lib.so',ffi.DynamicLibrary.FLAGS.RTLD_LAZY);

var SetCallback = ffi.ForeignFunction(
  lib.get('SetCallback'),'void',['pointer']
);

var callback = ffi.Callback('void',[Info],(info) => {
    console.log(`ID: ${info.ID}`);
    console.log(`name: ${JSON.stringify(info.chName)}`);
});

SetCallback(callback);

当回调被触发时,info.ID 是正确的,但 info.chName 要么是一个全 0 的数组(我确信这不正确),要么发生了段错误

>

我觉得我可能误解了 C++ 在这里的工作方式,希望得到任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)