Frage zu z.B. Byte Ptr und Types in Funktionen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

hamztata

Betreff: Frage zu z.B. Byte Ptr und Types in Funktionen

BeitragMo, März 23, 2009 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Fang grad erst an mit BM und hab da mal eine grundlegende Frage.
Und zwar folgendes.

Code: [AUSKLAPPEN]
GLOBAL xGetMeshVB%(entity%) "win32"


Ist logisch ist die Vordefinition für xGetMeshVB mit einem integer Parameter (entity), welcher übergeben wird.
Als Rückgabe wird ebenfalls ein Integer erwartet.

Soweit sogut, und so kenn ich das auch.

im quellcode wurde dies nun nach
Code: [AUSKLAPPEN]
GLOBAL xGetMeshVB:Byte ptr(entity%)

geändert.

Das verstehe ich insoweit, daß nun eben ein Pointer mit Byte Größe erwartet wird.
Auch soweit klar.(hoffe ich seh das richtig so)

Nun habe ich das gleiche aber auch hier gesehen:
Code: [AUSKLAPPEN]
xLoadMesh_%(path:Byte Ptr,parent%) "win32"


und nun das was mich wundert:
Code: [AUSKLAPPEN]
xCreateDXSprite%(path:String) "win32"


ist nun standard eigentlich "String" und Byte Ptr universell einsetzbar?


und da habe ich noch eine wichtige frage am rande.
ich möchte einer function als parameter einen type übergeben und diesen im härtefall auch wieder zurückbekommen.also structur des types ausserhalb der funktion füllen, an funktion übergeben, und auch in dieser wieder füllen auslesen etc. können.

im grund ein globaler Type.
aber wie wäre dort der übergabedatentyp, bzw. wie würde die syntax lauten?


Also in der Function sicherlich: Code: [AUSKLAPPEN]
Function Ffunction%(type:TType)
aber wie müsste die deklaration davon aussehen?

auch Code: [AUSKLAPPEN]
GLOBAL Ffunction%(type:TType) "win32"



Ich hoffe die Fragen sind nicht zuviel, oder zu noobisch....is im moment das einzige was mich beschäftigt.
 

ChristianK

BeitragMo, März 23, 2009 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Funktion mit Global deklariert wird, handelt es sich um einen Funktionszeiger. In deinem Beispiel ist das wohl eine Funktion von Xors3D. Um sie aufrufen zu können, wird sie mit GetProcAddress aus der entsprechenden DLL geladen. Das dient also hauptsächlich zum Import externer Funktionen.
Wenn du eine eigene Funktion in BlitzMax schreiben willst, musst du sie mit Function definieren. Für Types als Parameter solltest du immer den entsprechenden Type als Parametertyp nehmen, wie du es in deinem Beispiel gemacht hast. Bei externen Funktionen sollte jedoch immer Byte Ptr als Datentyp für Referenzen verwendet werden, weil Funktionen aus anderen DLLs in der Regel nichts mit BlitzMax-Objekten anfangen können.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

hamztata

BeitragMo, März 23, 2009 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
also so wie ich es unten gemacht habe ists also richtig?
war nur eine schlussfolgerung mehr nicht.also kein kopierter code.
und ja ist von xors3d, aber nur als beispiel.

Zitat:
Bei externen Funktionen sollte jedoch immer Byte Ptr als Datentyp für Referenzen verwendet werden


was meinst du damit?
was meinst du mit referenzen?
in diesem fall sinds auf jeden fall strings, die man auch als string definieren könnte.
es ist mal als byte ptr mal als string in ein und demselben code zu sehen.

das ist auch das was mich so verwundert hat.
da wo ich weiß, dass ein string übergeben wird, oder auch zurückgegeben wird, könnte ich doch auch string als datentyp nehmen, oder?

als beispiel für die typesache bb code:

Code: [AUSKLAPPEN]
Function xTestOval% (xPoint%, yPoint%, xOval%, yOval%, WidthOval%, HeightOval%, Loc%=0)
   Return xTestOval_ (xPoint, yPoint, xOval, yOval, WidthOval, HeightOval, Loc, FI_Test, 1)
End Function


und die decl:

Code: [AUSKLAPPEN]
xTestOval_% (xPoint%, yPoint%, xOval%, yOval%, WidthOval%, HeightOval%, Local%, Result*, ResultFlag%) : "TestOval_"


und der Type FI_Test alias Result*

Code: [AUSKLAPPEN]
Type FI_TestType
   Field Result%
   Field ProjectedXX%, ProjectedYY%
   Field RectX%, RectY%
   Field RectU#, RectV#
   Field TextureX%, TextureY%
   Field Texture%
   Field Frame%
   Field Reserved1%
End Type
Global FI_Test.FI_TestType = New FI_TestType



den type könnte ich halt also standard festlegen, und statt in der decl als übergabe Result* würde ich also Byte Ptr nehmen, richtig?

und in der funktion dann wieder das type wie ich im vorherigen post schon ganz unten gewahrsagt hatte.

bitte um richtigstellung wenn ich irgendwo falsch liege.

vielleucht kann mir ja jemand die zwei zelen kurz schreiben, die das betreffen würde.
wäre nett.

sooo ich les dann mal weiter tuts.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group