Emitir valores de retorno da função C chamado de Python

Eu tenho dificuldade com um problema aparentemente simples. Existem várias funções C que eu preciso chamar do código Python. Atualmente, estou tentando fazer isso através de ctypes. Estou tendo problemas com uma implementação de exemplo simples que estou usando para garantir que tudo funcione como pretendido antes de alterar grandes blocos de código existente. As funções C tomam alguns parâmetros, fazem vários cálculos matemáticos e, em seguida, retornam um valor duplo. Este é o arquivo C que estou usando como teste.

#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;
}

Na minha função de teste real estou imprimindoval1 eval2 para garantir que eles estejam recebendo valores. Tudo está bem nesse fim. O Python que chama essa função é o seguinte.

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

Quando isso imprime o resultado retornado, normalmente despeja um grande número negativo. É minha suposição de que preciso fazer alguma conversão antes que o Python possa manipular o valor, mas não consigo encontrar uma resposta para isso na minha vida. Eu procurei sempre, mas não tenho certeza se estou perdendo o óbvio, ou procurando pela informação errada.

Além disso, se eu alterar o tipo de retorno da função para int, os cálculos ficarão corretos e um int será retornado e impresso conforme o esperado. Se eu configurá-lo para o dobro, os cálculos estão corretos no código C (eu imprimi-los para verificar), mas o Python não gosta do resultado retornado.

Alguma idéia do que estou perdendo?

questionAnswers(1)

yourAnswerToTheQuestion