C++ aus C heraus aufrufen

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

C++ aus C heraus aufrufen

Beitrag von Jside » Fr Mär 05, 2010 11:39 am

Hi, ich hab mein eigenes Framework programmiert, und bastle gerade Python bindings dafür. diese benötigen jedoch C funktionen(= mit C Signaturen(!)) und folglich würde es mich Interessieren, wie ich C++ Klassen(!!) aus C heraus aufrufe.

...anyone?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ aus C heraus aufrufen

Beitrag von Xin » Fr Mär 05, 2010 12:17 pm

Jside hat geschrieben:Hi, ich hab mein eigenes Framework programmiert, und bastle gerade Python bindings dafür. diese benötigen jedoch C funktionen(= mit C Signaturen(!)) und folglich würde es mich Interessieren, wie ich C++ Klassen(!!) aus C heraus aufrufe.
Achtung(!): Diese Antwort ist nicht unbedingt die einzig glücklichmachende Lösung, da ich mich mit Python-Bindings nicht gut genug auskenne.

Entweder indem Du die Signaturen abschreibst, was eher unschön ist, oder Du Wrapperklassen erzeugst, die entsprechende C-Funktionen aufrufen, was auch nicht wirklich schön ist, aber auch noch funktioniert, falls GCC die Methoden mal anders benennt oder Du VC++ benutzen willst.

Code: Alles auswählen

// wrapper.h
extern "C" int NewMyClass();
extern "C" void FuncCall( int this );

//wrapper.c
int NewMyClass
{
  return reinterpret_cast< int >( new MyClass() );
}

void FuncCall( int this )
{
  reinterpret_cast< MyClass * >( this )->FuncCall();
}
In Python deklarierst Du dann eine Klasse, die nur das int-Handle hält und bei der Python-Memberfunkion FuncCall entsprechend die C-Funktion FuncCall(int) ruft, die dann die Methode der C-Klasse ruft.
Jside hat geschrieben:...anyone?
Das hier ist keine Versteigerung.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: C++ aus C heraus aufrufen

Beitrag von AnGaiNoR » Mo Nov 01, 2010 9:52 pm

Ich grab diesen Thread mal wieder aus. :)
Die Wunderbibliothekensammlung Boost bietet auch hierfür eine elegante Lösung. Dazu könntest du dir mal Boost.Python anschauen
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: C++ aus C heraus aufrufen

Beitrag von Jside » Do Nov 04, 2010 8:55 pm

AnGaiNoR hat geschrieben:Ich grab diesen Thread mal wieder aus. :)
Die Wunderbibliothekensammlung Boost bietet auch hierfür eine elegante Lösung. Dazu könntest du dir mal Boost.Python anschauen
Genau boost::python oder andere Wrapper wollte ich nicht benutzen, da insbesondere boost nur Probleme auf einer Platform, die ich benutze macht...

Antworten