使用node-ffi回调函数中文乱码

卖火柴的小东东
  • 93

我的代码:

const ffi = require('ffi');
const ref = require("ref");

let ReadIdcard = ffi.Library('./ReadIdcard.dll', {
  'initReadIdcard': ['int', ['pointer']]
});

let callback = ffi.Callback('void', ['string'],
  function(data) {
    console.log("data: ", data);
  });

console.log("registering the callback");
let z = ReadIdcard.initReadIdcard(callback);
console.log('done');

// Make an extra reference to the callback pointer to avoid GC
process.on('exit', function() {
  callback
});

DLL声明:

READIDCARD_API typedef void(*PIDDataCB)(char * pData);   

READIDCARD_API int initReadIdcard(PIDDataCB func);

32位DLL下载:
链接: https://pan.baidu.com/s/1KcKl... 密码: g7d3

应该是编码的问题,我尝试转码,发现都不能正常打印中文,DLL是可用的,在QT中用local8bit转换可以正常显示中文

clipboard.png

后边的英文sorry可以正常显示


另外用了解到有fastcall这个模块,写了一下,发现好像没有调用

const fastcall = require('fastcall');
const Library = fastcall.Library;
const ref = fastcall.ref;

const lib = new Library('ReadIdcard.dll')
.callback({ PIDDataCB: ['void', ['string']] })
.function({ initReadIdcard: ['int', ['PIDDataCB']] });

function callback(data) {
  console.log("data: ", data);
};

lib.interface.initReadIdcard(callback);

请会的朋友帮忙看看是哪里的问题,无论是乱码或者fastcall使用,先谢谢了

回复
阅读 5.2k
2 个回答
function callback(data) {
  console.log("data: ", data);
};

不能在data进行转码吗?
iconv模块

smallcol
  • 2
新手上路,请多包涵

楼主有解决掉这个问题吗?是dll里修改还是?

我是自己写的dll,把里面的中文字符进行过处理后再输出给ffi调用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏