Сообщить об ошибке.

Служебные функции модуля ctypes в Python

В разделе приведены и разобраны все служебные функции модуля ctypes. По некоторым, часто используемым функциям представлены примеры с комментариями.

Содержание:


ctypes.addressof(obj):

Функция ctypes.addressof() возвращает адрес буфера памяти как целое число. Аргумент obj должен быть экземпляром типа ctypes.

Вызывает событие аудита ctypes.addressof с аргументом obj.

ctypes.alignment(obj_or_type):

Функция ctypes.alignment() возвращает требования к выравниванию типа ctypes. Аргумент obj_or_type должен быть типом или экземпляром ctypes.

ctypes.byref(obj[, offset]):

Функция ctypes.byref() возвращает упрощенный указатель на obj, который должен быть экземпляром типа ctypes. Смещение offset по умолчанию равно нулю и должно быть целым числом, которое будет добавлено к значению внутреннего указателя.

Выражение byref(obj, offset) соответствует этому коду языка C:

(((char *)&obj) + offset)

Возвращенный объект может использоваться только как параметр вызова внешней C-функции. Он ведет себя так же, как ctypes.pointer(obj), но построение происходит намного быстрее.

Смотрите пример в материале "Указатели Pointer модуля ctypes", а именно подраздел в конце статьи "Передача указателей или передача параметров по ссылке".

ctypes.cast(obj, type):

Функция ctypes.cast() похожа на оператор приведения в C. Она возвращает новый экземпляр типа, который указывает на тот же блок памяти, что и obj. Аргумент type должен быть типом указателя, а obj должен быть объектом, который можно интерпретировать как указатель.

Смотрите пример в материале "Преобразования типов модуля ctypes"

ctypes.create_string_buffer(init_or_size, size=None):

Функция ctypes.create_string_buffer() создает изменяемый символьный буфер. Возвращаемый объект представляет собой массив ctypes.c_char.

Аргумент init_or_size должен быть целым числом, определяющим размер массива, или байтовым объектом, который будет использоваться для инициализации элементов массива.

Если в качестве первого аргумента указан объект байтов, то буфер становится на один элемент больше, чем его длина, так как последний элемент в массиве является символом завершения NUL. В качестве второго аргумента можно передать целое число, которое позволяет указать размер массива, если длину байтов использовать нельзя.

Вызывает событие аудита ctypes.create_string_buffer с аргументами init, size.

ctypes.create_unicode_buffer(init_or_size, size=None):

Функция ctypes.create_unicode_buffer() создает изменяемый буфер символов Юникода. Возвращенный объект представляет собой массив ctypes.c_wchar.

Аргумент init_or_size должен быть целым числом, определяющим размер массива, или строкой, которая будет использоваться для инициализации элементов массива.

Если в качестве первого аргумента указана строка, то буфер становится на один элемент больше, чем длина строки, так как последний элемент в массиве является символом завершения NUL.

Если длина строки не должна использоваться в качестве размера массива, то в качестве второго аргумента может быть передано целое число, которое будет указывать размер массива.

Вызывает событие аудита ctypes.create_unicode_buffer с аргументами init, size.

ctypes.DllCanUnloadNow():

Только для Windows.

Функция ctypes.DllCanUnloadNow() представляет собой перехватчик, который позволяет реализовать внутрипроцессные COM-серверы с модулем ctypes. Он вызывается из функции DllCanUnloadNow(), которую экспортирует dll расширения _ctypes.

ctypes.DllGetClassObject():

Только для Windows.

Функция ctypes.DllGetClassObject() представляет собой перехватчик, который позволяет реализовать внутрипроцессные COM-серверы с модулем ctypes. Он вызывается из функции DllGetClassObject(), которую экспортирует dll расширения _ctypes.

ctypes.util.find_msvcrt():

Только для Windows.

Функция ctypes.util.find_msvcrt() возвращает имя файла библиотеки VC runtime library, используемой Python и модулями расширения. Если имя библиотеки не может быть определено, возвращается None.

Если необходимо освободить память, например, выделенную модулем расширения с помощью вызова free(void *), важно, чтобы использовалась функция в той же библиотеке, которая выделяла память.

ctypes.FormatError([code]):

Только для Windows.

Функция ctypes.FormatError() возвращает текстовое описание кода ошибки. Если код ошибки не указан, то последний код ошибки используется путем вызова функции Windows API GetLastError().

ctypes.GetLastError():

Только для Windows.

Функция ctypes.GetLastError() возвращает последний код ошибки, установленный Windows в вызывающем потоке. Эта функция вызывает функцию Windows GetLastError() напрямую и не возвращает частную копию кода ошибки ctypes.

ctypes.get_errno():

Функция ctypes.get_errno()возвращает текущее значение ctypes-private, копии системной переменной errno в вызывающем потоке.

Вызывает событие аудита ctypes.get_errno без аргументов.

ctypes.get_last_error():

Только для Windows.

Функция ctypes.get_last_error() возвращает текущее значение ctypes-private, копии системной переменной LastError в вызывающем потоке.

Вызывает событие аудита ctypes.get_last_error без аргументов.

ctypes.memmove(dst, src, count):

Функция ctypes.memmove() то же, что и стандартная функция memmove() библиотеки C: копирует count байт из src в dst. Аргументы dst и src должны быть целыми числами или экземплярами ctypes, которые можно преобразовать в указатели.

ctypes.memset(dst, c, count):

Функция ctypes.memset() то же, что и стандартная функция memset() библиотеки C: заполняет блок памяти по адресу dst количеством байт count со значением c. Аргумент dst должен быть целым числом, определяющим адрес или экземпляр ctypes.

ctypes.POINTER(type):

Фабричная функция ctypes.POINTER() создает и возвращает новый тип указателя ctypes. Типы указателей кэшируются и повторно используются внутри, поэтому повторный вызов этой функции обходится дешево.

Тип должен быть типом ctypes.

ctypes.pointer(obj):

Функция ctypes.pointer() создает новый экземпляр указателя, указывающий на obj. Возвращаемый объект имеет тип POINTER(type(obj)).

Примечание. Если просто нужно передать указатель на объект в вызов внешней C-функции, то следует использовать функцию ctypes.byref(obj), что будет намного быстрее.

ctypes.resize(obj, size):

Функция ctypes.resize() изменяет размер size буфера внутренней памяти объекта obj, который должен быть экземпляром типа ctypes.

Невозможно сделать буфер меньше, чем собственный размер типа объектов, заданный параметром sizeof(type(obj)), но можно увеличить буфер.

Смотрите пример в материале "Поддержка модулем ctypes данных переменного размера".

ctypes.set_errno(value):

Функция ctypes.set_errno() устанавливает текущее значение ctypes-private, копии системной переменной errno в вызывающем потоке равным value и возвращает предыдущее значение.

Вызывает событие аудита ctypes.set_errno с аргументом errno.

ctypes.set_last_error(value):

Только для Windows.

Функция ctypes.set_last_error() устанавливает текущее значение ctypes-private, копии системной переменной LastError в вызывающем потоке равным value и возвращает предыдущее значение.

Вызывает событие аудита ctypes.set_last_error с аргументом errno.

ctypes.sizeof(obj_or_type):

Функция ctypes.sizeof() возвращает размер в байтах буфера памяти типа ctypes или его экземпляра. Действует так же, как оператор sizeof языка C.

ctypes.string_at(address, size=-1):

Функция ctypes.string_at() возвращает строку C, начинающуюся с адреса памяти address, как байтовый объект. Если указан аргумент size, то он используется как размер, в противном случае предполагается, что строка оканчивается нулем.

Вызывает событие аудита ctypes.string_at с аргументом address и size.

ctypes.WinError(code=None, descr=None):

Только для Windows.

Функция ctypes.WinError() создает экземпляр исключения OSError. Если аргумент code не указан, то вызывается GetLastError() для определения кода ошибки. Если не указан аргумент descr, то вызывается FormatError() для получения текстового описания ошибки.

ctypes.wstring_at(address, size=-1):

Функция ctypes.wstring_at() возвращает широкосимвольную строку, начинающуюся с адреса address памяти, в виде строки. Если указан аргумент size, то он используется как количество символов в строке, в противном случае предполагается, что строка оканчивается нулем.

Вызывает событие аудита ctypes.wstring_at с аргументами address, size.