ctypes chama funções de bibliotecas compartilhadas sem compilar uma extensão Python. Essa flexibilidade transfere ao programa a responsabilidade por tipos, ponteiros, buffers e convenção de chamada.
Exemplo prático
import ctypes
import ctypes.util
library_name = ctypes.util.find_library("c")
if library_name is None:
print("C runtime not found by name")
else:
runtime = ctypes.CDLL(library_name)
runtime.strlen.argtypes = [ctypes.c_char_p]
runtime.strlen.restype = ctypes.c_size_t
print(runtime.strlen(b"Python"))
Declare a assinatura
Defina argtypes e restype antes da chamada. Sem isso, ctypes aplica suposições que podem truncar valores ou interpretar um ponteiro como inteiro. Confirme a ABI na documentação da biblioteca.
Memória e tempo de vida
Mantenha vivos buffers e callbacks enquanto o código C puder acessá-los. Valide tamanhos antes de copiar dados e nunca aceite um caminho de biblioteca arbitrário vindo do usuário.
Escolha a integração adequada
Para uma API extensa, considere um binding oficial, CFFI ou uma extensão compilada com testes. ctypes funciona melhor em superfícies pequenas e estáveis.
Continue estudando
Aprofunde a base com tratamento de erros em Python. A documentação oficial do Python, consultada em 22 de julho de 2026, detalha a API, as limitações e as diferenças entre versões.