鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 使用node-ffi回調(diào)函數(shù)中文亂碼

使用node-ffi回調(diào)函數(shù)中文亂碼

我的代碼:

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

應(yīng)該是編碼的問題,我嘗試轉(zhuǎn)碼,發(fā)現(xiàn)都不能正常打印中文,DLL是可用的,在QT中用local8bit轉(zhuǎn)換可以正常顯示中文

clipboard.png

后邊的英文sorry可以正常顯示


另外用了解到有fastcall這個模塊,寫了一下,發(fā)現(xiàn)好像沒有調(diào)用

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使用,先謝謝了

回答
編輯回答
愛礙唉
function callback(data) {
  console.log("data: ", data);
};

不能在data進(jìn)行轉(zhuǎn)碼嗎?
iconv模塊

2017年5月2日 13:36