vue 调用c++_node-ffi 调用C++ dll Callback返回空缓冲区问题

最近遇到一个奇怪的问题,ffi.Callback如果返回值是void *或者pointer时,能拿到指针地址,但是指针长度会为0的问题。因为返回为void *,但节点ffi不知道分配多长的缓冲区给它,所以就把length 给设置成0了?

看来返回指针的时候还得带上指针长度。

C++:

//初始化

EXPORTFUNC int testInit(callbackFunc logCallBack) ;

//回调函数声明

typedef void(*callbackFunc)(void *userdata);

Electron +Vue:

const ffi = window.require("ffi-napi");

const ref = window.require('ref-napi');

const iconvLite = window.require("iconv-lite");

const dll = new ffi.Library('resources/dll', {

"testInit":['int',['pointer']],

});

const SDKCallBack = ffi.Callback(ref.types.void,['pointer'],(p)=>{

let b = ref.readPointer(p.ref(),0,100);//因为拿不到长度,暂定100测试

let data = [];

for(let i = 0 ;i < b.length;i++){

let d = b.readInt8(i) & 0xff;

if(d == 0)

break;

data.push(d);

}

let buffer = Buffer.from(data);

console.log(iconvLite.decode(buffer,"gbk"));

});

dll.testInit(SDKCallBack);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值