#sqlite #ffi #crystal-lang
#sqlite #ffi #crystal-lang
Вопрос:
Задача, над которой я работаю, — добавить поддержку create_function
интерфейса к привязке SQLite в Crystal: https://github.com/crystal-lang/crystal-sqlite3/issues/61
Чтобы получить доступ к параметрам для определяемой пользователем функции, мне нужно получить доступ к массиву в стиле C (то есть указателю на смежные экземпляры) sqlite3_value
типа, который, если я не ошибаюсь, требует знания размера типа. Но, насколько я обнаружил, нет способа объявить тип Crystal в качестве псевдонима для типа, определенного в библиотеке C.
Ответ №1:
Поскольку это указатель, нет, вам не обязательно знать его расположение. Для непрозрачных указателей этот шаблон распространен в Crystal:
type Sqlite3Context = Void*
type Sqlite3Value = Void*
fun sqlite3_create_function(
[...]
xFunc : (Sqlite3Context, Int, Sqlite3Value*) ->,
[...]
)
Комментарии:
1. Спасибо. Я забыл, что это два уровня указателей, а не просто указатель на массив структур. Это фактически решило мою проблему! Хотя я все равно хотел бы знать, есть ли способ получить размер типа, определенного в библиотеке C.