Пустой буфер при чтении данных указателя на символ с использованием node-ffi - PullRequest
0 голосов
/ 14 января 2019

Файл DLL был разработан в Delphi. Функция была описана ниже:

Имя функции: GetMsg

Описание функции: используется для получения ошибки Информация.

Прототип функции: процедура GetMsg (ret: Integer; var Msg: PChar); STDCALL;

Описание параметра: 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));

Я всегда получаю такой ответ: result of the code

Обратите внимание, что я использую ctypes в Python, я могу получить китайское сообщение, соответствующее значению -25.

Есть предложения по этому поводу?

1 Ответ

0 голосов
/ 15 января 2019

У меня была примерно такая же проблема, попробуйте мое решение:

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