使用node-ffi读取char指针数据时为空缓冲区

时间:2019-01-14 14:57:17

标签: node-ffi

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

  

函数名称:GetMsg

     

功能描述:用于获取错误   信息。

     

函数原型:过程GetMsg(ret:Integer; var Msg:   PChar); stdcall;

     

参数说明:ret:表示错误代码。讯息:用于   输出相应的错误信息。

     

首先,您需要分配   记忆。内存大于或等于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));

我总是收到以下答复: result of the code

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

对此有何建议?

1 个答案:

答案 0 :(得分:0)

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

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);