Я забыл, как круто ctypes:
Ниже скопировано с http://docs.python.org/library/ctypes.html
Таким образом, наша функция обратного вызова получает указатели на целые числа и должна возвращать целое число. Сначала мы создаем тип для функции обратного вызова:
CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
Для первой реализации функции обратного вызова мы просто выводим полученные аргументы и возвращаем 0 (пошаговое развитие; -):
def py_cmp_func(a, b):
print "py_cmp_func", a, b
return 0
Создание обратного вызова на C:
cmp_func = CMPFUNC(py_cmp_func)