Seite 1 von 1

C++ Klassenobjekt in Python ansprechen...

Verfasst: Donnerstag 24. April 2008, 01:46
von DonnerCobra
Hallo,

vorab, bitte nicht erschrecken, der Code sieht evtl., komplizierter aus als er ist. Wenn nicht, umso froher bin ich, dass er nicht abschreckt, hab ihn soweit gekürzt wie es nur geht.

Und zwar habe ich ein kleines Problem bei der Ansteuerung von Objekten. Ich habe ein C++ Klassenobjekt erzeugt und wollte mal fragen inwieweit es möglich ist, dieses Objekt in meiner eingebetteten Python_Umgebung anzusprechen.

Code: Alles auswählen

#include <Python/Python.h>

class Kugel {
	public:
		int radius()
		{
			return 800;
		}
};

PyObject* write_something(PyObject* pSelf, PyObject* pArgs)
{
	printf("I am a python-script");
	return Py_None;
}

static PyMethodDef myMethods[] = {
    {"write_something", write_something, METH_NOARGS},
    {NULL, NULL, 0, NULL}
};

int main (int argc, char **argv) {
	
	Kugel k1;
	
	Py_SetProgramName("testclient"); 
	Py_Initialize();
	PySys_SetArgv(argc, argv);	
	
	Py_InitModule("log", myMethods);

	//Ich kann mittels log.write_something meine Funktion ansprechen...
	//Wie kann ich jedoch k1.radius() ansprechen?
	PyRun_SimpleString("import log\n"
						"log.write_something()");
	
	Py_Finalize();
    return 0;
}
Meine Frage steht in Zeile 34. Wie lässt sich mein einfaches C++ Objekt oben ansprechen? Ich wäre soo dankbar über jede Hilfe, danke :)

Bye!

Verfasst: Freitag 25. April 2008, 08:33
von DonnerCobra
hi, hat sowas noch keiner probiert? :lol: *vorsichtig frag*

Verfasst: Freitag 25. April 2008, 08:50
von BlackJack
Ich habe so etwas noch nicht probiert, würde aber vorschlagen das nicht von Hand zu machen sondern Boost::Python, SIP, oder SWIG zu benutzen um die Brücke zu schlagen.

Verfasst: Freitag 25. April 2008, 09:46
von DonnerCobra
Ich frag mal eine doch ernstgemeinte Frage, auch wenn du sie fast schon mit "ja" beantwortest hast:

Ist die übernahme von Objekten so viel einfacher?

bye!

Verfasst: Freitag 25. April 2008, 09:51
von BlackJack
Ich nehme mal an ja, weil damit wohl viel "boiler plate"-Code automatisch generiert wird.

Verfasst: Sonntag 27. April 2008, 23:31
von DonnerCobra
Hi! :)

Das hieße für meinen Beispielcode gäbs keine Lösung? Echt schade :-/

Verfasst: Montag 28. April 2008, 08:19
von BlackJack
Die Frage verstehe ich nicht? Wenn man z.B. mit SIP Quelltext generieren kann, liesse sich der natürlich auch per Hand schreiben, wenn man dass denn möchte.