Конечно, ответ должен каким-то образом передать/принять непрерывный блок памяти, поэтому вопрос в том, как это сделать. На данный момент я все еще могу избежать проблемы, написав функции обертки на стороне С, но это не очень многого.Haskell FFI - Как обрабатывать функции C, которые принимают или возвращают структуры вместо указателей на структуры?
ответ
FFI не поддерживает произвольный проход по значению сохраняемых типов Haskell.
Вы можете передавать только значения типа (и некоторые из них являются указателями):
Int#, Word#,
Char#,
Float#, Double#,
Addr#,
StablePtr# a, MutableByteArray#, ForeignObj#, and ByteArray#.
Таким образом, чтобы передать структуру, которую вы должны обернуть вызов через C обертке; который берет указатель и передает его значение функции C, которую вы хотите вызвать.
Недавнее расширение GHC допускает импорт «primop», который обходит механизм FFI и поддерживает условные условные соглашения и передает структуры через unboxed кортежи. Например.
Вы можете использовать их, чтобы сделать tricky low level stuff вот так.
Спасибо, что связали этот блог - у него много действительно полезного материала. – Crashworks
- 1. Haskell FFI - C данных массива данных структуры
- 2. Как обрабатывать структуры больших указателей
- 3. Попутный-структуры, как данные между C и Haskell через FFI
- 4. Вызов родных DLL-функций, которые возвращают (и принимают) указатели на структуры
- 5. Массив указателей на структуры
- 6. Массив общих указателей, которые указывают на элементы структуры, какой синтаксис?
- 7. C Инициализация заданных указателей структуры структуры
- 8. Понимание указателей на структуры
- 9. Сортировка массива указателей на структуры внутри структуры
- 10. Кастинг Структуры пустоты указателей на структуры с типизированными указателями
- 11. Преобразование структуры C в FFI :: Struct
- 12. массив указателей на структуры
- 13. Установка указателей на структуры
- 14. NodeJS FFI - создать массив структуры
- 15. Массив указателей на структуры печати
- 16. C: Указатель на элемент структуры внутри структуры
- 17. Структуры данных на основе указателей
- 18. Индекс массива внутри структуры FFI
- 19. инициализация массива указателей на структуры
- 20. в C Структуры рассматриваются в качестве указателей
- 21. перераспределить массив указателей на структуры в C
- 22. Массив указателей на массив структуры
- 23. C - Функции Структуры
- 24. Создание массива указателей на структуры - C++
- 25. C: Динамический массив указателей на массив структуры
- 26. C++ Смещение массива указателей на структуры
- 27. C - Trouble прохождения структуры указателей на функцию
- 28. Haskell - FFI и указатели
- 29. Попутный Структуры указателей
- 30. Память, выделяющая массив указателей структуры в c
Вы ищете что-то вроде [этого] (http://www.haskell.org/haskellwiki/FFICookBook#Working_with_structs). –
Просто для подтверждения: вы хотите передать структуру по значению, а не ссылку? –
@ Да, да, это правильно. – Cubic