Я использую Node-ffi, чтобы написать привязки Node для Mitie. Но у меня проблема,
Аргумент функции char**
: Массив строк C с нулевым символом в конце, например:
int run (char** tokens)
{
try
{
std::vector<std::string> words;
for (unsigned long i = 0; tokens[i]; ++i)
words.push_back(tokens[i]);
return 1;
}
catch(...)
{
return 0;
}
}
И вот что я использовал ffi:
const ffi = require('ffi');
const ArrayType = require('ref-array');
const StringArray = ArrayType('string')
const test = ffi.Library('test', {
'run': [ 'int', [StringArray] ]
});
test.run(['a', 'b']);
Но я получил: Segmentation fault: 11
,
Я загрузил образец кода в это репо.
И в этом репо вы также можете видеть, что я написал привязки Python ctypes, Работает хорошо.
Вот моя операционная среда:
Вы должны явно завершить массив токенов с помощью NULL:
const ffi = require('ffi');
const ArrayType = require('ref-array');
const ref = require('ref');
const StringArray = ArrayType('string')
const test = ffi.Library('test', {
'run': [ 'int', [StringArray] ]
});
console.log(test.run(['a', 'b', ref.NULL])); // -> 2
Других решений пока нет …