首页 > 解决方案 > 使用 node-ffi 读取字符指针数据时的空缓冲区

问题描述

DLL 文件是在 Delphi 中开发的。该功能描述如下:

函数名称:GetMsg

功能说明:用于获取错误信息。

函数原型:procedure GetMsg(ret: Integer; var Msg: PChar); 标准调用;

参数说明: ret:错误码。Msg:用于输出相应的错误信息。

首先,您需要分配内存。内存大于等于255。

根据描述,我知道Msg参数是一个指针,然后我使用 node-ffi 来调用如下GetMsg过程:

var ffi = require('ffi');
var ref = require('ref');

var TheLib = ffi.Library('TheLib.dll', {
  GetMsg: ['void', ['int', ref.types.CString]]
});
const outNameBuffer = Buffer.alloc(255);
TheLib.GetMsg(-25, outNameBuffer);
console.log(outNameBuffer, ref.readCString(outNameBuffer));

我总是得到这样的回应: 代码的结果

请注意,我ctypes在 Python 中使用,我可以获得与 value 对应的中文消息-25

对此有何建议?

标签: node-ffi

解决方案


我遇到了同样的问题,试试我的解决方案:

var ffi = require('ffi');
var ref = require('ref');
var ArrayType = require('ref-array');
var charPtrArray = ArrayType('char *', 64);
var charPtrArrayPtr = ref.refType(charPtrArray);

var TheLib = ffi.Library('TheLib.dll', {
  GetMsg: ['void', ['int', charPtrArrayPtr]
});

console.log(charPtrArrayPtr);

推荐阅读