Tag: ctypes

Как мне упаковать для распространения модуль python, который использует общую библиотеку?

Я пишу некоторые привязки для библиотеки C, и я не уверен, как настроить все это для распространения, чтобы можно было pip install мой пакет. Допустим, у меня есть следующие файлы: library.c library.h wrapper.py Для того чтобы моя библиотека обертки работала, необходимо: компилировать library.c и создать общую библиотеку запустите ctypesgen на ctypesgen чтобы сгенерировать код ctypes […]

Управление памятью ctypes: как и когда освобождены выделенные ресурсы?

Я пишу небольшую обертку для библиотеки C в Python с Ctypes, и я не знаю, будут ли структуры, выделенные из Python, автоматически освобождаться, когда они выходят за рамки. Пример: from ctypes import * mylib = cdll.LoadLibrary("mylib.so") class MyPoint(Structure): _fields_ = [("x", c_int), ("y", c_int)] def foo(): p = MyPoint() #do something with the point foo() […]

Поддержание возможности упаковки python библиотеки C

У меня плохо спроектированы и большие ( > 300 public functions , >200 numeric constants определенных с #define в файле заголовка), которые я должен обернуть в Python. У меня есть dll и h файл. Библиотека обновляется ежегодно, до сих пор обратно совместимым способом (т.е. добавлены только функции, константа хранит их числовые значения и т. Д.). […]

Ptyon ctypes: как изменить существующий массив char *

Я работаю над приложением Python, которое использует libupnp, который является библиотекой C. Я использую CTypes для использования библиотеки, которая достаточно проста. Проблема, с которой я сталкиваюсь, – это когда я регистрирую функцию обратного вызова для запросов на чтение. Функция имеет прототип следующего вида: int read_callback(void *pFileHandle, char *pBuf, long nBufLength); pFileHandle – это всего лишь […]

Щелкните правой кнопкой мыши на Python, используя ctypes

Я полный новичок в Python, поэтому не понимаю жаргон. Я хочу использовать python для простого нажатия на определенную точку. Я уже успел щелкнуть левой кнопкой мыши с помощью ctypes: >>> import ctypes >>> ctypes.windll.user32.SetCursorPos(x,y), ctypes.windll.user32.mouse_event(2,0,0,0,0), ctypes.windll.user32.mouse_event(4,0,0,0,0) есть ли способ сделать правый щелчок таким же образом?

Различные версии msvcrt в ctypes

В Windows объект ctypes.cdll.msvcrt автоматически существует, когда я импортирую модуль ctypes, и он представляет библиотеку времени исполнения msvcrt Microsoft C ++ в соответствии с документами . Тем не менее, я замечаю, что есть также функция find_msvcrt, которая "return the filename of the VC runtype library used by Python" . Далее говорится: "If you need to […]

Как вернуть указатель на структуру в ctypes?

Я пытаюсь передать указатель структуры, которая получает меня как возвращаемое значение из функции «бар» в функцию «foo_write». Но я получаю сообщение об ошибке «TypeError: должен быть тип ctypes» для строки «foo = POINTER (temp_foo)». В онлайн-справке ctypes я обнаружил, что ctypes.POINTER работает только с типами ctypes. Вы знаете по-другому? Чтобы вы посоветовали? C: typedef struct […]

ctypes и передавать по ссылке на функцию

Я пытаюсь использовать libpcap в python3 с помощью ctypes. учитывая следующую функцию в C pcap_lookupnet(dev, &net, &mask, errbuf) в python у меня есть следующее pcap_lookupnet = pcap.pcap_lookupnet mask = ctypes.c_uint32 net = ctypes.c_int32 if(pcap_lookupnet(dev,net,mask,errbuf) == -1): print("Error could not get netmask for device {0}".format(errbuf)) sys.exit(0) и я получаю ошибку File "./libpcap.py", line 63, in <module> […]

Ctypes не находит символы в общей библиотеке, созданные с помощью CMake

Мой параметр CMake для создания общей библиотеки lib в Linux – это что-то вроде SET (CMAKE_CXX_FLAGS "-fPIC") SET (LIB_UTILS_SRC Utils.cpp ) ADD_LIBRARY (UTILS SHARED ${LIB_UTILS_SRC} ) Источник Utils.cpp double addTwoNumber(double x, double y) { return x + y; } При попытке доступа к функции addTwoNumber с помощью CTypes, например import os import ctypes as c […]

Python с использованием ctypes для передачи массива char * и заполнения результатов

Я пытаюсь использовать ctypes для создания массива char * в python для передачи в библиотеку для заполнения строками. Я ожидаю, что 4 строки будут содержать не более 7 символов в каждой. Мой код выглядит так: testlib.py from ctypes import * primesmile = CDLL("/primesmile/lib.so") getAllNodeNames = primesmile.getAllNodeNames getAllNodeNames.argtypes = [POINTER(c_char_p)] results = (c_char_p * 4)(addressof(create_string_buffer(7))) err […]

Python - лучший язык программирования в мире.