Ctypes: типы данных из C-определения

У меня есть адрес функции, а также ее «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 существует, однако у меня нет опыта работы с ним, и, насколько я смотрю в документации, я не смог найти даже базового решения для одного адреса функции.

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


person hr0m    schedule 13.03.2017    source источник


Ответы (1)


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

person hr0m    schedule 13.03.2017