Ich schreibe ein Python-Modul in C und ich muss es rufen Sie eine Python-Funktion mit einem der Argumente von "Referenz" übergeben. Das Endergebnis sollte sein, dass das, was die Python-Funktion für das Argument tut, in der ursprünglichen C-Variablen gespeichert wird.Python C API: Rufen Sie eine Python-Funktion mit Argument (s) durch Referenz übergeben
int *resume; // this int is actually passed in to this body of code
PyObject *resumeInt; // which was originally a C callback func for libnids, but
PyObject *ret; // I removed/rewrote most of this code for clarity
resumeInt = Py_BuildValue("i",-1);
ret = PyObject_CallFunction(tcpResumeFunc, "(O)", resumeInt);
*resume = PyInt_AsLong(resumeInt);
Py_DECREF(ret);
Py_DECREF(resumeInt);
Um zu testen, ich hatte die Python-Funktion, die tcpResumeFunc die übergebenen-in = 5.em ganze Zahl darstellt, ändern Wenn ich * Lebenslauf am Ende dieses Codes ausdrucken, aber es behält es anfänglichen Wert -1 . Ich weiß, dass ich etwas falsch verstehe, wie die API funktioniert. Irgendwelche Vorschläge?
Ich verstehe das, (ich denke) ich nahm an, dass seit * resumeInt auf das gleiche Objekt verwiesen, nach der Übergabe an PyObject_CallFunction würde ich mit der neuen * resumeInt wie von der Python-Funktion genannt genannt geändert werden. Dann wandle ich es einfach zurück in eine C-Variable mit PyInt_AsLong. Stimmt etwas nicht mit dieser Idee? Ihr Vorschlag klingt etwas eleganter und einfacher, aber ich würde das gerne verstehen. –
Ah, nach deiner Bearbeitung macht es mehr Sinn. Also was ich versuche zu tun, wäre wahrscheinlich unmöglich. Ich werde den Code ändern, damit er den Wert zurückgibt.Ich würde abstimmen, aber ich habe nicht genug Ansehen; gute Antwort, vielen Dank! –