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.