CPP zu BMax compatiblität/linkbarkeit

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Jan_

Ehemaliger Admin

Betreff: CPP zu BMax compatiblität/linkbarkeit

BeitragDo, Jan 13, 2005 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie eventuell bekannt, bin ich in CPP ein n00b.
Darum, Kann(wenn ja, wie) ich auch die Type
Code: [AUSKLAPPEN]

namespace irr
{
namespace core
{
   //! Rounding error constant often used when comparing f32 values.
   const f32 ROUNDING_ERROR   = 0.0001f;

   //! Constant for PI.
   const f32 PI            = 3.14159f;

   //! Constant for converting bettween degrees and radiants.
   const f64 GRAD_PI      = 180.0 / 3.1415926535897932384626433832795;

   //! Constant for converting bettween degrees and radiants.
   const f64 GRAD_PI2      = 3.1415926535897932384626433832795 / 180.0;

} // end namespace core
}// end namespace irr

nach BMax exportieren

Ich hatte mir das ala
Code: [AUSKLAPPEN]

Extern

Type irr

end extern


Vorgestellt.

Ich konnte aber bisher kein BSP finden.
between angels and insects

Vertex

BeitragDo, Jan 13, 2005 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommt ganz darauf an, wie gcc den unterschiedlichen Namespace handhabt. Es können ja mehrere Klassen den selben Namen besitzen, jedoch in unterschiedlichen Namespace. Im Grunde bindest du die Datei durch Extern "MyCPP.cpp" ein. Wenn ich zu Hause bin, teste ich das ganze mal, kann durchaus sein, dass nur Funktionen selber mit eingebunden werden können(sprich keine Methoden, Konstanten, Variablen etc.).

Müsstest dann halt deine Methoden(inklusive Konstruktor und Destruktor) nochmal zusätzlich in Funktionen einbinden, und die Konstanten in der *.bmx Datei mit definieren.

mfg olli
vertex.dreamfall.at | GitHub

Jan_

Ehemaliger Admin

BeitragDo, Jan 13, 2005 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, das Problem, ist aber, das die Funktionen direkt, die Eigens definierten Typen, übergeben haben wollen, und ich mir sehr unsicher bin, ob ein BMax Type, als ein CType anerkannt wird.
Ich sogar davon aufgehe, das das nciht funtioniert.
between angels and insects

Vertex

BeitragDo, Jan 13, 2005 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Konstruktor selber liefert dir ja den Pointer der neuen Instanz zurück, die du in BMax als Integerwert speicher kannst. Also eine Art Handle. Das musst du dann halt an die jeweiligen Funktionen übergeben, die die Methoden mit beinhalten.
mfg olli
vertex.dreamfall.at | GitHub

Jan_

Ehemaliger Admin

BeitragDo, Jan 13, 2005 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
joa, da hast du recht.

Und, kann man auhc in BB den Type selber erstellen?
between angels and insects

Vertex

BeitragDo, Jan 13, 2005 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe es jetzt nochmal ausprobiert, und nein, es können nur Globale Variablen, Konstanten sowie Funktionen im Externbereich deklariert werden.

Ich habe mal das hier prbiert, jedoch findet er nicht zu 3 Funktionen warum auch immer...

Test.cpp
Code: [AUSKLAPPEN]
// Die Klasse selber -----------------------------------------
class TCar
{
   private:
      int x, y;
      float speed;
     
   public:
      void TSetX(int val);
      void TSetY(int val);
      void TSetSpeed(float val);
         
      int TGetX(void);
      int TGetY(void);
      float TGetSpeed(void);
};

void TCar::TSetX(int val) { x = val; }
void TCar::TSetY(int val) { y = val; }
void TCar::TSetSpeed(float val) { speed = val; }

int TCar::TGetX(void) { return x; }
int TCar::TGetY(void) { return y; }
float TCar::TGetSpeed(void) { return speed; }
// -----------------------------------------------------------

// Methoden verpackt in Funktionen ---------------------------
TCar *CreateTCar(void);
void SetX(TCar Car, int Val);
void SetY(TCar Car, int Val);
void SetSpeed(TCar Car, float Val);

int GetX(TCar Car);
int GetY(TCar Car);
float GetSpeed(TCar Car);

TCar *CreateTCar(void)
{
   TCar *Car;
   Car = new TCar;
   return Car;
}
void SetX(TCar Car, int Val) { Car.TSetX(Val); }
void SetY(TCar Car, int Val) { Car.TSetY(Val); }
void SetSpeed(TCar Car, float Val) { Car.TSetSpeed(Val); }
int GetX(TCar Car) { return Car.TGetX(); }
int GetY(TCar Car) { return Car.TGetY(); }
float GetSpeed(TCar Car) { return Car.TGetSpeed(); }
// -----------------------------------------------------------


Test.bmx:
Code: [AUSKLAPPEN]
Import "Test.cpp"
Extern
   Function CreateTCar:Int()
   
   Function SetX(Car:Int, Val:Int)
   Function SetY(Car:Int, Val:Int)
   Function SetSpeed(Car:Int, Val:Float)

   Function GetX:Int(Car:Int)
   Function GetY:int(Car:Int)
   Function GetSpeed:Float(Car:Int)
End Extern

Local MyCar:Int = CreateTCar()
SetX(MyCar, 10)
Print GetX(MyCar);


Wobei man diese externen Funktionen wieder in einem Type vereinen könnte. In wie weit das ganze Sinn macht, ist fragwürdig. Ich pers. werde sowiso nur mit C arbeiten.

mfg olli

Edit: OK, in dem Sinne kanste es hacken mit C++. Anscheinend wird ausschließlich nur C unterstützt. Das sind halt die Probleme eine Hochsprache in eine andere zu integrieren.
vertex.dreamfall.at | GitHub
 

Nemesis

BeitragFr, Jan 14, 2005 8:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

// Die Klasse selber -----------------------------------------
class TCar
{
   private:
      int x, y;
      float speed;
     
   public:
      void TSetX(int val);
      void TSetY(int val);
      void TSetSpeed(float val);
         
      int TGetX(void);
      int TGetY(void);
      float TGetSpeed(void);
};

void TCar::TSetX(int val) { x = val; }
void TCar::TSetY(int val) { y = val; }
void TCar::TSetSpeed(float val) { speed = val; }

int TCar::TGetX(void) { return x; }
int TCar::TGetY(void) { return y; }
float TCar::TGetSpeed(void) { return speed; }
// -----------------------------------------------------------

// Methoden verpackt in Funktionen ---------------------------
extern "C"
{
   TCar *CreateTCar(void);
   void SetX(TCar Car, int Val);
   void SetY(TCar Car, int Val);
   void SetSpeed(TCar Car, float Val);
   
   int GetX(TCar Car);
   int GetY(TCar Car);
   float GetSpeed(TCar Car);
   
   TCar *CreateTCar(void)
   {
      TCar *Car;
      Car = new TCar;
      return Car;
   }
   void SetX(TCar Car, int Val) { Car.TSetX(Val); }
   void SetY(TCar Car, int Val) { Car.TSetY(Val); }
   void SetSpeed(TCar Car, float Val) { Car.TSetSpeed(Val); }
   int GetX(TCar Car) { return Car.TGetX(); }
   int GetY(TCar Car) { return Car.TGetY(); }
   float GetSpeed(TCar Car) { return Car.TGetSpeed(); }
   // -----------------------------------------------------------
}


Also damit lässt sich das ding zwar ausführe aber der rückgabe wert stimmt ned. (sieht aus wie ne adresse oder so )

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group