Я пытаюсь использовать node-ffi для взаимодействия с Win32 API FormatMessageA, однако я не могу получить параметр out lpBuffer, вот фрагмент кода, чтобы показать, что я пробовал
'use strict';
const ref = require('ref');
const ffi = require('ffi');
const Kernel32 = ffi.Library('Kernel32.dll', {
FormatMessageA: ['ulong', [
'ulong', //flags
'void *',
'ulong', //status number
'ulong', //language
'uchar *',
'ulong',
'void *'
]]
});
const FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;
const FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100;
const FORMAT_MESSAGE_IGNORE_INSERTS = 0x200;
const lpBuffer = ref.alloc('uchar *');
const result = Kernel32.FormatMessageA(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
null,
0x80090300, //error code
0,
lpBuffer,
0,
null
);
console.log(result); //prints 57 bytes
Я знаю, что функция выполнена успешно, поскольку она возвращает 57, однако я не могу получить значение lpBuffer, содержащее требуемую строку ошибки.
lpBuffer
является указателем наLPTSTR
; вы должны привести указатель кLPTSTR
(например,(LPTSTR)&lpBuffer
). Второй пример (в конце той же страницы) иллюстрирует, как использоватьFORMAT_MESSAGE_ALLOCATE_BUFFER
. - person CristiFati   schedule 24.03.2017lpBuffer
должно бытьref.alloc('uchar **')
(не знаю, имеет ли это смысл в JS). - person CristiFati   schedule 24.03.2017