Seite 1 von 1
Nochmal: C-Funktion in Python integrieren...
Verfasst: Mittwoch 20. Juni 2007, 21:16
von TS1234
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
Verfasst: Mittwoch 20. Juni 2007, 22:33
von Joghurt
Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.
www.swig.org
Verfasst: Mittwoch 20. Juni 2007, 22:58
von veers
Joghurt hat geschrieben:Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.
www.swig.org
Ich weis nicht mit SWIG gewrappte Libs habe ich als ziemlich buggy und unelegant in Erinnerung. Zudem war/ist das Debuggen immer mühsam.
Mag aber auch Zufall/persönliches empfinden sein.
Verfasst: Mittwoch 20. Juni 2007, 23:02
von birkenfeld
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.

Verfasst: Donnerstag 21. Juni 2007, 11:51
von CM
birkenfeld hat geschrieben:wenn du eine C-Funktion aus Python aufrufen willst
Wenn ich es richtig verstehe will TS1234 ja eher das Umgekehrte erreichen.
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
Verfasst: Donnerstag 21. Juni 2007, 20:38
von TS1234
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...
Verfasst: Donnerstag 21. Juni 2007, 21:04
von birkenfeld
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)
Ja, weil blender höchstwahrscheinlich ein Modul anbietet, das sich von diesen Skripten importieren lässt.
Verfasst: Donnerstag 21. Juni 2007, 21:31
von veers
Tipp:
XChat hat ein Python Modul. Das dürfte recht simpel sein und macht was du willst.

Verfasst: Freitag 22. Juni 2007, 14:36
von TS1234
hm und was nützt mir xchat jetzt?
Verfasst: Freitag 22. Juni 2007, 15:25
von BlackJack
`xchat` ist Open Source und in C geschrieben, d.h. Du kannst Dir anschauen wie es dort gemacht wurde.
Verfasst: Freitag 22. Juni 2007, 17:38
von TS1234
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...
Verfasst: Freitag 22. Juni 2007, 20:18
von TS1234
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...