Ich möchte aus C ein Python-Skript aufrufen... das habe ich soweit geschafft...
nun möchte ich eine C-Funktion global in Python-Runtime registrieren, welche ich dann aufrufen kann, wenn ich Python-Skript starte...
(C-Code grob)
-Initialize
-Register Function char* foo(char* a, char* b) <<<problem weiß nicht wie
-RunSimpleString ("x=foo(a,b)")
-Finalize
ach ja ohne wrapper-DLL's usw. sollte es schon gehen... irg. ist es so schwer... ich kenne zwar die C-Api+Embedding-Tut - aber ich kann die Funktionen dazu nicht finden... und wie die Kommunikation zw. C und Py gehen soll verstehe ich auch noch nicht
Ein Beispiel wäre genial
Nochmal: C-Funktion in Python integrieren...
Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.
www.swig.org
www.swig.org
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Ich weis nicht mit SWIG gewrappte Libs habe ich als ziemlich buggy und unelegant in Erinnerung. Zudem war/ist das Debuggen immer mühsam.Joghurt hat geschrieben:Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.
www.swig.org
Mag aber auch Zufall/persönliches empfinden sein.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
So einfach ist das nicht... wenn du eine C-Funktion aus Python aufrufen willst, musst du mindestens ein Modul erstellen. Da hilft auch nicht, sich um das E&E-Tutorial zu drücken.
Wenn ich es richtig verstehe will TS1234 ja eher das Umgekehrte erreichen.birkenfeld hat geschrieben:wenn du eine C-Funktion aus Python aufrufen willst
Vielleicht magst Du eher mal unter comp.lang.python nachfragen? Hier wird so selten embedding besprochen, daß ich vermute die Nachfrage dort ist ergiebiger als hier im Forum. (Überzeugt mich eines Besseren .)
Allerdings hat birkenfeld recht: Erst mal das e&e-Tutorial lesen ...
Gruß,
Christian
ne ich möchte das ohne wrapper, zusatzlibs machen - so direkt wie möglich...
ich meine das geht doch irgendwie... z.B. in blender klappt es auch... da muß man zwar blender-modul importieren
man kann aber aus blender heraus ein python-script starten und dieses script ruft irg. welche internen funktionen von blender auf... (zumindest schaut es so aus)
aber, dass es so kompliziert ist, habe ich ir auch nicht gedacht... eine einzige funktion einzubinden und strings zu übergeben würde mir ja reichen...
ich meine das geht doch irgendwie... z.B. in blender klappt es auch... da muß man zwar blender-modul importieren
man kann aber aus blender heraus ein python-script starten und dieses script ruft irg. welche internen funktionen von blender auf... (zumindest schaut es so aus)
aber, dass es so kompliziert ist, habe ich ir auch nicht gedacht... eine einzige funktion einzubinden und strings zu übergeben würde mir ja reichen...
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ja, weil blender höchstwahrscheinlich ein Modul anbietet, das sich von diesen Skripten importieren lässt.TS1234 hat geschrieben: man kann aber aus blender heraus ein python-script starten und dieses script ruft irg. welche internen funktionen von blender auf... (zumindest schaut es so aus)
`xchat` ist Open Source und in C geschrieben, d.h. Du kannst Dir anschauen wie es dort gemacht wurde.
hab es mir angesehen... xchat macht es bisschen komplizierter... aber bisschen hat es mich weitergebracht - da habe ich paar strukturen gefunden
und sogar eine api-function:
PyCFunction_NewEx()
diese ist wie erwartet nicht dokumentiert... naja mal schauen ob das klappt...
und sogar eine api-function:
PyCFunction_NewEx()
diese ist wie erwartet nicht dokumentiert... naja mal schauen ob das klappt...
hm... hab nun gefunden wie es geht:
http://www.python.org/doc/ext/extending ... dding.html
hab es zuerst nicht verstanden... geht wohl einfacher als zuerst gedacht...
http://www.python.org/doc/ext/extending ... dding.html
hab es zuerst nicht verstanden... geht wohl einfacher als zuerst gedacht...