Ausgabe von Rückgabewerten aus der C-Funktion, die von Python aufgerufen wird

Ich habe Schwierigkeiten mit einem scheinbar einfachen Problem. Es gibt verschiedene C-Funktionen, die ich aus Python-Code aufrufen muss. Derzeit versuche ich dies über ctypes zu tun. Ich habe Probleme mit einer einfachen Beispielimplementierung, die ich verwende, um sicherzustellen, dass alles wie beabsichtigt funktioniert, bevor große Teile des vorhandenen Codes geändert werden. Die C-Funktionen nehmen einige Parameter auf, führen verschiedene mathematische Berechnungen durch und geben dann einen doppelten Wert zurück. Dies ist die C-Datei, die ich als Test verwende.

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

In meiner eigentlichen Testfunktion drucke ichval1 undval2 um sicherzustellen, dass sie Werte erhalten. In diesem Punkt ist alles in Ordnung. Der Python, der diese Funktion aufruft, ist der folgende.

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

Wenn das zurückgegebene Ergebnis gedruckt wird, wird normalerweise eine große negative Zahl ausgegeben. Ich gehe davon aus, dass ich erst etwas konvertieren muss, bevor Python den Wert verarbeiten kann, aber ich kann für mein ganzes Leben keine Antwort darauf finden. Ich habe für immer gesucht, bin mir aber nicht sicher, ob mir das Offensichtliche fehlt oder ich nach den falschen Informationen suche.

Wenn ich den Rückgabetyp der Funktion in int ändere, werden die Berechnungen korrekt ausgeführt und ein int wird wie erwartet zurückgegeben und gedruckt. Wenn ich es auf double setze, sind die Berechnungen im C-Code korrekt (ich drucke sie zur Überprüfung aus), aber Python gefällt das zurückgegebene Ergebnis nicht.

Irgendwelche Ideen, was mir fehlt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage