У меня есть адрес функции, а также ее «c-подобное» представление (из llvmlite, но это не так важно).
Для функции, которая складывает два двойных значения и возвращает их, код будет выглядеть так: cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)
Это будет работать достаточно хорошо, однако аргумент моей функции может различаться по типу и количеству. В питоне это решается с помощью некоторого генератора for arg in args
.
Однако у меня нет инструмента (или, по крайней мере, я его не нашел), как «конвертировать» или анализировать мои типы в типы ctype.
Аргументами являются объекты llvmlite-Type, поэтому у меня есть c- подобное представление типа доступно.
Мой подход состоял бы в том, чтобы создать dict, который может сопоставлять объекты llvmlite-Type или c-представление с объектами Type ctypes. Небольшой парсер тоже может помочь.
Разве ctype уже не предоставляет что-то подобное? Волшебная функция: ctypes.magic("double") == ctypes.c_double
Я не привязан к ctypes. Я знаю, что CFFI существует, однако у меня нет опыта работы с ним, и, насколько я смотрю в документации, я не смог найти даже базового решения для одного адреса функции.
Я знаю, что мой вариант использования довольно редок, поскольку обе эти библиотеки больше заботятся о библиотеках, а не о конкретном адресе функции.