Seite 1 von 1

cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 18:10
von derschutzhund
Hallöchen,

habe einige C++ Module die ich gerne in PB einbauen würde:
https://github.com/puku0x/cvdrone/tree/ ... rc/ardrone
Dazu habe ich diesen Beitrag gefunden:
http://www.purebasic.fr/german/viewtopi ... &hilit=cpp
und zum Aufruf:
http://www.purebasic.fr/german/viewtopi ... &hilit=cpp

Jetzt die Frage, da die Beiträge ja schon etwas ältern sind, ist das noch aktuell oder gibt es noch andere Möglichkeiten?
Wie würdet ihr das machen?

Wie verwende ich die ardrone.h -Datei, da ja da weitere *.h aufgerufen werden?

LG

Wolfgang

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 21:39
von edel
Der Code exportiert keine C Funktionen, da wirst du es schwer haben den in pb einzubinden.
Da wirst du dir wohl einen Wrapper schreiben muessen.

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 22:04
von derschutzhund
edel hat geschrieben:Der Code exportiert keine C Funktionen, da wirst du es schwer haben den in pb einzubinden.
Da wirst du dir wohl einen Wrapper schreiben muessen.
Ok und wie?

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 22:17
von Derren
Den C++ Code als DLL kompilieren (bzw gleich die Binary runterladen, falls angeboten) und dann mit den entsprechenden Parametern die Funktionen dieser DLL aufrufen. Die benötigten Konstanten und Parametertypen stehen in der/den Headerdatei(en) (*.h)
Sehen aber ganz schön umfangreich aus. Wird einiges an Arbeit.

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 22:21
von edel
Erstmal benoetigst du ein Objekt der Klasse. Das kannst du z.B. so machen:

Code: Alles auswählen

extern "C" Hubschrauber* Hubschrauber()
{
   return new Hubschrauber();
}
Wenn du jetzt in pb den Wrapper importierst und die Funktion "Hubschrauber()" aufrufst, bekommst du das Objekt zurueck. Um auf die Funktionen des Objektes zugreifen zu koennen, musst du noch die Funktionen exportieren.

Wenn das hier die Klasse waere

Code: Alles auswählen

class Hubschrauber
{
   bool isKaputt();
}
koenntest du es so machen :

Code: Alles auswählen

extern "C" Hubschrauber* Hubschrauber_new()
{
   return new Hubschrauber();
}

extern "C" bool Hubschrauber_isKaputt(Hubschrauber* fly)
{
   return fly->isKaputt();
}

in PB kannst du das dann so ansprechen :

Code: Alles auswählen

fly = Hubschrauber_new()
debug Hubschrauber_isKaputt(fly)
Derren hat geschrieben:Den C++ Code als DLL kompilieren (bzw gleich die Binary runterladen, falls angeboten) und dann mit den entsprechenden Parametern die Funktionen dieser DLL aufrufen. Die benötigten Konstanten und Parametertypen stehen in der/den Headerdatei(en) (*.h)
Sehen aber ganz schön umfangreich aus. Wird einiges an Arbeit.
Nein, muss er nicht, da die Klasse das alles regelt, welche auch recht ueberschaubar ist. Mit ein wenig C++ Kenntnisse sollte das keine grosse Arbeit sein.

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 22:23
von derschutzhund
Derren hat geschrieben:Den C++ Code als DLL kompilieren (bzw gleich die Binary runterladen, falls angeboten) und dann mit den entsprechenden Parametern die Funktionen dieser DLL aufrufen. Die benötigten Konstanten und Parametertypen stehen in der/den Headerdatei(en) (*.h)
Sehen aber ganz schön umfangreich aus. Wird einiges an Arbeit.
Das wären dann diese Dateien?
https://github.com/puku0x/cvdrone/tree/ ... bin/vs2012

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 23:04
von NicTheQuick
Um Klassen zu nutzen, kann man normalerweise auch in PB einfach Interfaces definieren und dann an ein Objekt dieser Klasse, das natürlich aus der DLL kommt, hängen.

Re: cpp-Module in PureBasic einbauen

Verfasst: 16.01.2014 23:38
von derschutzhund
NicTheQuick hat geschrieben:Um Klassen zu nutzen, kann man normalerweise auch in PB einfach Interfaces definieren und dann an ein Objekt dieser Klasse, das natürlich aus der DLL kommt, hängen.
Hast du dafür mal ein kurzes Beispiel?
Habe mich bisher erfolgreich um Klassen und Objektprogrammierung herumgemogelt :oops:

Re: cpp-Module in PureBasic einbauen

Verfasst: 26.01.2014 16:22
von NicTheQuick
Huch, hab den Post gerade erst wieder gesehen.

Also leider habe ich gerade kein Beispiel dafür, aber es gibt ja nicht umsonst die ganzen vordefinierten Interfaces in PB, die man im Structure-Viewer sehen kann. Für Linux scheint es da gar nichts vordefiniert zu geben, für Windows glaube ich aber schon.

Re: cpp-Module in PureBasic einbauen

Verfasst: 26.01.2014 17:13
von edel
Die Klasse muss sich dafuer aber auch eignen. Um ein Wrapper kommt er hier nicht herum.