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

hamztataBetreff: Frage zu z.B. Byte Ptr und Types in Funktionen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group