В разделе приведены и разобраны все служебные функции модуля ctypes
. По некоторым, часто используемым функциям представлены примеры с комментариями.
ctypes.addressof()
возвращает адрес буфера памяти,ctypes.alignment()
возвращает требования к выравниванию,ctypes.byref()
возвращает упрощенный указатель,ctypes.cast()
возвращает новый экземпляр типа,ctypes.create_string_buffer()
создает изменяемый символьный буфер,ctypes.create_unicode_buffer()
создает изменяемый буфер символов,ctypes.DllCanUnloadNow()
позволяет реализовать COM-серверы,ctypes.DllGetClassObject()
позволяет реализовать COM-серверы,ctypes.util.find_msvcrt()
возвращает файл библиотеки VC runtime library,ctypes.FormatError()
возвращает текстовое описание кода ошибки,ctypes.GetLastError()
возвращает последний код ошибки,ctypes.get_errno()
передает значение ctypes-private
копии errno
,ctypes.get_last_error()
передает значение ctypes-private
копии LastError
,ctypes.memmove()
копирует count
байт из src
в dst
,ctypes.memset()
заполняет память dst
количеством count
байт со значением c
.,ctypes.POINTER()
создает и возвращает новый тип указателя,ctypes.pointer()
создает новый экземпляр указателя,ctypes.resize()
изменяет размер буфера внутренней памяти,ctypes.set_errno()
устанавливает значение ctypes-private
копии errno
в потоке,ctypes.set_last_error()
устанавливает значение ctypes-private
копии LastError
в потоке,ctypes.sizeof()
возвращает размер в байтах буфера памяти,ctypes.string_at()
возвращает строку C, начинающуюся с адреса в памяти,ctypes.WinError()
создает экземпляр исключения OSError
,ctypes.wstring_at()
возвращает широкосимвольную строку,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
.