Python Callback von SWIG PyObject_Call Segfault

8

Ich habe ein wx.py.Shell.shell-Widget, mit dem der Benutzer Python-Code ausführen kann, der mit meinem Programm interagiert. Ich möchte in der Lage sein, eine Funktion, die der Benutzer in diesem Bereich definiert, an meinen C ++ - Code (durch den wxswig generierten Wrapper um mein benutzerdefiniertes Widget) zu übergeben und auszuführen.

In meinem C ++ Code verwende ich eine std :: function & lt; & gt; Klasse zum Aufrufen gebundener Funktionen (C ++ oder Python)

Also habe ich eine einfache Klasse erstellt, um das PyObject mit dem Funktionsaufrufoperator zu umhüllen. Allerdings bekomme ich einen segfault, wenn ich versuche, das PyObject * aufzurufen.

%Vor%

Bei meinen Versuchen, herauszufinden, was vor sich ging, habe ich eine Reihe von Druckanweisungen eingefügt. Eine davon gibt den Typnamen und die Referenz aus und zählt die Zeile vor dem segfault. Dies führt zu "Funktion 3", so dass ich davon ausgehen muss, dass die Funktion noch nicht zerstört wurde.

Ich gebe folgendes an swig:

%Vor%

In dem ich ein PyMenuCallback konstruiere

Ich bin ratlos für was verursacht die segfault, irgendwelche Ideen?

    
Tocs 11.07.2012, 15:11
quelle

1 Antwort

3

Da C ++ den Python-Callback aufruft, befindet er sich in einem wxWidget, und der Swig-Wrapper wird vom speziellen wxPython-Swig (wxswig?) generiert. Um den Funktionsaufruf herum ist ein Threadschutz erforderlich ...

Der feste Operator sollte so aussehen

%Vor%

Stellen Sie sicher, dass

eingeschlossen ist %Vor%     
Tocs 18.02.2015, 16:03
quelle