Я не могу понять, какой тип ‘ref’ использовать в этой ситуации.
У меня есть функция DLL, которая возвращает bool и принимает указатель файла в качестве параметра:
__declspec(dllexport) BOOL __stdcall GB_Build( FILE *fname )
{ return Greenhouse.Build(fname) == true ? TRUE : FALSE; }
И привязка Node-FFI:
var ffi = require('ffi');
var ref = require('ref');
var greenbuildlib = null;
greenbuildlib = './PGD/GreenBuild_DLL.dll';
var greenbuild = ffi.Library(greenbuildlib, {
"GB_GetBayLength": ['double', []],
"GB_SetBayLength": ['void', ['double']],
"GB_Build": ['bool', [ref.types.Object]],
});
module.exports = greenbuild;
Функция «GB_Build» создает файл json и возвращает логическое значение на основе того, был ли файл создан или нет. fname означает «имя файла» и является nullptr C ++ в коде C ++ в DLL.
Мне интересно, что бы ref.type был правильно передать указатель файла в Node-FFI. Я пробовал указатели null, null, string и Object, но все они вызывают сбой приложения, когда я пытаюсь сделать это в коде клиента:
var file_name = "test.json";
greenbuild.GB_Build(file_name)
Спасибо за любую помощь. Я не смог найти другой вопрос по stackoverflow о файловых указателях в Node-FFI.
Для всех, кто столкнулся с этой проблемой, поскольку этот вопрос не получил ответов, кажется, что ответом является то, что Node-FFI вообще не имеет указателя файла. Вы должны изменить исходный код для C или C ++, чтобы использовать вместо него char *.
Других решений пока нет …