Python in C++ Project(e) einbinden (wie in Battlefield)

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

hm ich habe mich jetzt mal etwas "rangetastet". Wenn ich jetzt einfach mal eine funktion nehme und sie dann im idle "aufrufe":

Code: Alles auswählen

>>> def myfunc(): return

>>> myfunc
<function myfunc at 0x0051BC30>
Könnte das ^^^^^^^^ der Zeiger sein? Damit könnte ich dann eigentlich eindeutig die Funktion per registerHandler funktion in c++ registrieren. Damit wäre das ModulName problem gelöst, die Funktion ist praktisch eingelesen, und ich könnte sie dann eindeutig aufrufen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Krauzi hat geschrieben:hm ich habe mich jetzt mal etwas "rangetastet". Wenn ich jetzt einfach mal eine funktion nehme und sie dann im idle "aufrufe":

Code: Alles auswählen

>>> def myfunc(): return

>>> myfunc
<function myfunc at 0x0051BC30>
Könnte das ^^^^^^^^ der Zeiger sein? Damit könnte ich dann eigentlich eindeutig die Funktion per registerHandler funktion in c++ registrieren.
Ja, das ist die Speicheradresse des Objektes. Aber das ist nichts, auf das ich aufbauen würde, denn ist ist nirgends festgeschrieben, dass das die Speicheradresse sein muss. Aber das was du an deine C++-Funktion übergibst ist ja schon ein Zeiger auf deine Funktion. Den musst du nur speichern(Typ: object). Siehe: http://www.boost.org/doc/libs/1_41_0/li ... bject.html
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

hm ich möchte trotzdem mal schnell das ganze mit zeigern testen.
Komischerweise klappt aber schon das nicht (einfache parameter übergabe):

Code: Alles auswählen

void test( string msg="FU" ){ cout << msg << endl; }

BOOST_PYTHON_MODULE(gHost)
{
	def("test", test);
}
mit folgender fehlermeldung (bei import gHost; gHost.test("geht nicht")):

Code: Alles auswählen

Traceback (most recent call last):
  File "python/__init__.py", line 10, in <module>
    gHost.test( )
Boost.Python.ArgumentError: Python argument types in
    gHost.test()
did not match C++ signature:
    test(class std::basic_string<char,struct std::char_traits<char>,class std::a
llocator<char> >)
Interessant, mit typ "string" sollte das eigentlich gehen.

Hat jemand eine Idee, warum das nicht funzt?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Was willst du jetzt eigentlich „trotzdem“ mit Zeigern testen? Python-Objekte sind *immer* Zeiger.
Interessant, mit typ "string" sollte das eigentlich gehen.

Hat jemand eine Idee, warum das nicht funzt?
Vermutlich weil die Klasse „str“ heißt.
Antworten