Възможен дубликат:
Може 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