Wydaj zwracane wartości z funkcji C wywoływanej z Pythona

Mam problem z pozornie prostym problemem. Istnieją różne funkcje C, które muszę wywołać z kodu Pythona. Obecnie próbuję to zrobić za pomocą ctypes. Mam problemy z prostą przykładową implementacją, której używam, aby upewnić się, że wszystko działa zgodnie z przeznaczeniem przed zmianą dużych fragmentów istniejącego kodu. Funkcje C przyjmują kilka parametrów, wykonują różne obliczenia matematyczne, a następnie zwracają podwójną wartość. To jest plik C, którego używam jako testu.

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

W mojej rzeczywistej funkcji testowej drukujęval1 ival2 aby upewnić się, że otrzymują wartości. Na tym koniec wszystko jest w porządku. Python wywołujący tę funkcję jest następujący.

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

Gdy drukuje zwrócony wynik, zwykle zrzuca dużą liczbę ujemną. Moim założeniem jest, że muszę wykonać konwersję, zanim Python będzie w stanie obsłużyć tę wartość, ale nie mogę znaleźć odpowiedzi na to pytanie w życiu. Szukałem na zawsze, ale nie jestem pewien, czy tęsknię za oczywistością, czy szukam złych informacji.

Ponadto, jeśli zmienię typ powrotu funkcji na int, obliczenia okażą się poprawne i int zostanie zwrócone i wydrukowane zgodnie z oczekiwaniami. Jeśli ustawię go na podwójne, obliczenia są poprawne w kodzie C (wypisuję je do sprawdzenia), ale Python nie lubi zwróconego wyniku.

Jakieś pomysły, których mi brakuje?

questionAnswers(1)

yourAnswerToTheQuestion