Возможный дубликат:
может FFI имеет дело с массивами? Если да, то как?
У меня есть крошечный ассемблер, написанный на Haskell, который принимает строку с ассемблерным кодом и возвращает строку двоичного машинного кода. Я хочу иметь возможность использовать эту функцию в C, создав эту библиотеку Haskell как разделяемую библиотеку. Двоичный машинный код может содержать нулевые значения, поэтому я не могу использовать CString
в качестве возвращаемого типа, так как это обычная строка с завершающим нулем. И поскольку я не могу использовать CStringLen
в качестве возвращаемого значения в FFI.
Какой тип следует использовать для этого?
Сигнатура типа внутренней функции сборки:
assembly :: String -> ByteString
Вот пример ввода и вывода этой функции:
Вход:
decl r0 0x02
decl r1 0x10
add r0 r1
mov rr rs
Вывод (двоичные данные, представленные в шестнадцатеричном формате с 3 байтами в строке):
01 00 02
01 01 10
03 00 01
02 05 04
CStringLen
? (Т.е. есть функцияconvert :: ByteString -> IO (Ptr CStringLen)
? Или что-то в этом роде.) - person huon   schedule 30.09.2012Storable
. Я читаю на эту тему, но не нашел прямого решения. - person rzetterberg   schedule 30.09.2012