Emita valores de retorno desde la función C llamada desde Python

Tengo dificultad con un problema aparentemente simple. Hay varias funciones de C que necesito llamar desde el código de Python. Actualmente, estoy tratando de hacer esto a través de ctypes. Tengo problemas con una implementación de ejemplo simple que estoy usando para garantizar que todo funcione como se esperaba antes de cambiar grandes porciones de código existente. Las funciones de C toman algunos parámetros, hacen varios cálculos matemáticos y luego devuelven un valor doble. Este es el archivo C que estoy usando como prueba.

#include "Python.h"

double eval(double* args, int length, double* rands, int randLength, int debug)
{
    double val1 = args[0];
    double val2 = rands[0];
    double ret = val1 + val2;
    return ret;
}

En mi función de prueba real estoy imprimiendoval1 yval2 para asegurarse de que están recibiendo los valores. Todo está bien en ese sentido. El Python que llama a esta función es el siguiente.

test = ctypes.CDLL("/home/mjjoyce/Dev/C2M2L/AquaticWavesModel.so")
rand = Random();

args = [2]
argsArr = (ctypes.c_double * len(args))()
argsArr[:] = args

argsRand = [rand.random()]
argsRandArr = (ctypes.c_double * len(argsRand))()
rgsRandArr[:] = argsRand

result = test.eval(argsArr, len(argsArr), argsRandArr, len(argsRandArr), 0)
print "result", result

Cuando esto imprime el resultado devuelto, generalmente descarga un número negativo grande. Supongo que debo hacer un poco de conversión antes de que Python pueda manejar el valor, pero no puedo encontrar una respuesta para eso por mi vida. He buscado por siempre, pero no estoy seguro de si me estoy perdiendo lo obvio o si estoy buscando la información incorrecta.

Además, si cambio el tipo de retorno de la función a int, los cálculos resultarán correctos y se devolverá un int y se imprimirá como se esperaba. Si lo configuro en doble, los cálculos son correctos en el código C (los imprimo para verificar), pero a Python no le gusta el resultado devuelto.

¿Alguna idea de lo que me estoy perdiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta