Mit C++ auf BB Banks zugreifen?
Übersicht

![]() |
Xaymarehemals "Cgamer"Betreff: Mit C++ auf BB Banks zugreifen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit C++ auf BB Banks zugreifen?
Wie genau geht das? (Und ich frage hier, weil es hier C++ Programmierer gibt, die BB kennen.) Ich versuche nämlich parameter zu sparen indem ich die durch eine Bank an den Wrapper schicke der dadurch dann alles herausfinden kann(besonders bei VertexArrays) |
||
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
schreibe in Deine DECLS ein * als Datentyp und kopiere die Bank in ein Type. Alternativ übergibst Du das Handle der Bank und liest es so aus. Das ist aber extrem unelegant. Es ist hin und wieder notwendig in BB Speicher zu kopieren wenn C++ ein Struct zurückgibt, im umgekehrten Fall genügt der Zeiger auf Type. | ||
Farbfinsternis.tv |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
äh was? Ich glaube du hast mich andersrum verstanden.
1. Ich will mit C++ auf eine BB Bank zugreifen, nicht andersrum 2. Der * Parameter bringt ja nur das ich beliebige sachen übergeben kann. |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achtung! Das ist ungetestetes Halbwissen: Wenn du mit dem * Operator eine Bank an eine C/C++ Funktion übergibst, kannst du sie wie einen Zeiger handhaben:
Code: [AUSKLAPPEN] int getFirstInt(void *ptr){
return *((int*) ptr); } mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Banks übergeben ist an sich relativ simpel. Wie bruZard schon erwähnte, muss man in der Decls den Parameter als * angeben Code: [AUSKLAPPEN] .lib "MeineTolleDLL.dll"
TolleFunktion%( Bank* ):"_TolleFunktion@4" In C++ sähe die entsprechende Funktion dann so aus Code: [AUSKLAPPEN] //In VisualC++ musste ich _stdcall in __stdcall abändern, da sich sonst der Compiler beschwerte
//Ob das bei dir vonnöten ist, muss du ausprobieren extern "C" _declspec(dllexport) int _stdcall TolleFunktion( void* Bank ) { return *(int*)Bank; //Liefert die ersten 4 Bytes der Bank als Int zurück } Der BB-Code sähe dann so aus BlitzBasic: [AUSKLAPPEN] Local Bank = CreateBank( 4 ) Du kannst übrigens auch Types übergeben, das kann je nach dem auch nützlich sein. Wenn du in C++ viele Parameter bearbeiten willst, kannst du ausserdem die Bank in einen Struct-Pointer umcasten. Das macht das Bearbeiten dann leichter, da du nicht mehr auf Indizes zugreifst, sondern auf benannte Felder Code: [AUSKLAPPEN] struct Parameter {
int Foo; float Bar; unsigned char Fubar; //Etc. etc. }; extern "C" _declspec(dllexport) float _stdcall TolleFunktion( void* Bank ) { Parameter* P = (Parameter*)Bank; return ( Parameter->Foo + Parameter->Fubar )*Parameter->Bar; } Das setzt aber voraus, dass du das Format der Bank kennst und sich dieses nicht zwischen Funktionsaufrufen ändert. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok das klärt dann alles. Vielen dank. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group