cpp-Module in PureBasic einbauen

Anfängerfragen zum Programmieren mit PureBasic.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

cpp-Module in PureBasic einbauen

Beitrag 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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: cpp-Module in PureBasic einbauen

Beitrag 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.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: cpp-Module in PureBasic einbauen

Beitrag 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?
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: cpp-Module in PureBasic einbauen

Beitrag 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.
Signatur und so
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: cpp-Module in PureBasic einbauen

Beitrag 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.
Zuletzt geändert von edel am 16.01.2014 22:26, insgesamt 1-mal geändert.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: cpp-Module in PureBasic einbauen

Beitrag 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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: cpp-Module in PureBasic einbauen

Beitrag 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.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: cpp-Module in PureBasic einbauen

Beitrag 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:
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: cpp-Module in PureBasic einbauen

Beitrag 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.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: cpp-Module in PureBasic einbauen

Beitrag von edel »

Die Klasse muss sich dafuer aber auch eignen. Um ein Wrapper kommt er hier nicht herum.
Antworten