Ctypes: DataTypes из C-определения

У меня есть адрес функции, а также ее "c-like" представление (из llvmlite, но это не так важно).

Для функции, которая складывает два двойных значения и возвращает их, код будет выглядеть так: cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)

Это будет работать довольно хорошо, однако аргумент моей функции может различаться по типу и количеству. В Python это решаемо с некоторыми for arg in args генератор.

Однако у меня нет инструмента (или, по крайней мере, я его не нашел), как "преобразовать" или разобрать мои типы в типы ctype.

Аргументы являются объектами типа llvmlite, поэтому у меня есть доступное представление типа c.


Мой подход заключается в создании dict, который может отображать объекты типа llvmlite-Type или c-представление для объектов Type типов ctypes. Маленький парсер тоже может помочь.

Разве ctype уже не предоставляет что-то подобное? Волшебная функция: ctypes.magic("double") == ctypes.c_double

Я не связан с типами. Я знаю, что CFFI существует, однако у меня 0 опыта работы с ним, и, поскольку я смотрю в документах, я не смог найти даже базового решения для одного адреса функции.

Я знаю, что мой случай использования довольно редок, поскольку обе эти библиотеки больше заботятся о библиотеках, а не об адресе конкретной функции.

1 ответ

Хорошо, я просто использую диктовку со всеми возможностями. Поскольку я, вероятно, буду связан только с llvmlite, вариантов не так много.{str(ir.DoubleType()): ct.c_double, ....}

Другие вопросы по тегам