Array in Type als Pointer für Funktion
Übersicht

hamztataBetreff: Array in Type als Pointer für Funktion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
folgendes beispiel geht natürlich nicht, aber so in der art würde ich das gern lösen.
Also im type ist Array ein pointer und in der function wird dann ein array[256] zugeordnet. Weiß jemand wie das syntaktisch richtig heißen müsste? Code: [AUSKLAPPEN] Type TBeispiel
Field Array:byte Ptr end type global Beispiel:TBeispiel = New TBeispiel Function Irgendwas:int(x,x,x) TBeispiel.Array = Array[256] For...to...next... return End Function |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type TBeispiel
Field Array:Int[] End Type Global Beispiel:TBeispiel = New TBeispiel Function Irgendwas:Int() Beispiel.Array = New Int[256] For Local i:Int = 0 To Len(Beispiel.Array) - 1 Beispiel.Array[i] = i Next return 1 End Function Und wenn du es "global" haben möchtest so: Code: [AUSKLAPPEN] Type TBeispiel
Global Array:Int[] End Type Function Irgendwas:Int() TBeispiel.Array = New Int[256] For Local i:Int = 0 To Len(TBeispiel.Array) - 1 TBeispiel.Array[i] = i Next Return 1 End Function Da kann man glaub ich nicht viel erklären... Versteht sich von selbst, oder? lg MD |
||
.... |
hamztata |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
japp, mir so ein code auchtausendmal lieber um die funktionsweise zu verstehen...
danke dir eine frage aber noch bei dem global beispiel. wird ja das field sozusagen direkt globalisiert. was aber wenn da noch andere member im type sind, und ich den ganzen type dennoch immer noch global haben möchte. kann ich das zusätzlich auch machen? |
||
![]() |
HackerBoyZ |
![]() Antworten mit Zitat ![]() |
---|---|---|
EDIT:
ist wie eine global, nur das sie nur über den type aufgerufen werden kann. |
||
- Zuletzt bearbeitet von HackerBoyZ am Mo, Apr 06, 2009 15:09, insgesamt einmal bearbeitet
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja...
Stell dir Globale im Type eher so vor, wie ganz normale Globale. Du musst nur schereiben: TypeName.VariablenName Probier einfach mal ein wenig. |
||
.... |
hamztata |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab ich, haut aber net hin....
da... Code: [AUSKLAPPEN] Type FI_SurfacesType
Field Count:Int Global Array:Int[] Field Texture:Int End Type Global FI_Surfaces:FI_SurfacesType = New FI_SurfacesType Function xCreateImageEx:Int(texture:Int, width:Int, height:Int, imageFlags:Int = FI_AUTOFLAGS) If texture <> 0 Then FI_Surfaces.Array = New Int[256] FI_Surfaces.Texture = texture FI_Surfaces.Count = xGetTextureFrames(texture) If FI_Surfaces.Count>0 Then If FI_Surfaces.Count>256 Then FI_Surfaces.Count=256 For i=0 To FI_Surfaces.Count-1 FI_Surfaces.Array[i] = xGetTextureSurface(texture, i) Next Return xCreateImageEx_(FI_Surfaces, width, height, imageFlags) EndIf EndIf Return End Function und egal was ich probier, ich hab seit neuestem auch ein "duplicate identifier" an dieser Stelle: FI_Surfaces.Array[i] = xGetTextureSurface(texture, i) |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] FI_Surfaces.Array = New Int[256]
Array ist Global... Was hab ich gesagt? immer mit TypeNamen ![]() also Code: [AUSKLAPPEN] FI_SurfacesType.Array = New Int[256]
![]() |
||
.... |
hamztata |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
menno, glatt übersehen....lol.
aber was ist da mit anderen typ-members? muss ich die jetzt alle so aufrufen? also alle member global und dann eben immer den type.member so wie beim array. |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du rufst nur Variablen mit dem Type auf, wenn du Globale oder Konstanten im Type deklariert hast, normale Member die mit Field deklariert werden, rufst du ganz normal mit einer Instanz auf.
Aufrufe bzw. Veränderungen einer Globalen eines Types über eine Instanz bewirken die Veränderung der Globalen im Type, nicht in der Instanz! Code: [AUSKLAPPEN] Type Test
Global globale:int Constant konstante:int = 50 Field normaler_member:int EndType Test.globale = 100 'Aufruf mit Type Print Test.konstante ' Hier das gleiche Local _test:Test = new Test 'Instanz _test des Types Test _test.normaler_member = 30 'Aufruf über die Instanz _test.globale = 50 'Ändert die Globale des Types und nicht etwa die der Instanz _test, Test.globale ist jetzt 50 Ich hoffe verständlich und richtig ![]() MfG DaysShadow |
||
Blessed is the mind too small for doubt |
- Zuletzt bearbeitet von DaysShadow am Mo, Apr 06, 2009 17:38, insgesamt 2-mal bearbeitet
hamztata |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
werd ich heut abend gleich mal probieren, häng grad noch an einem anderen hybrid, also 2 sprachen projekt.
wenn ich aber den type dann komplett übergebe, wird dann der mit global versehene auch mit übergeben? eigentlich schon, oder? nunja habs erstmal probiert, wird compiliert ohne probleme. wenn jemand weiß wie ich es anstellen kann, eine funktion so umzubiegen.....wenn rückgabetyp der funktion :int ist, aber in der funktion eine dll funktion mit pointerrückgabe ist, und diese returnt wird. in c++ geht das nur hier nicht. da muss ich nicht extra nen neuen thread aufmachen hier mal der code.es hakt schon beim global array:int[] dann komplett bei dem type. dazu gibt es nur zu sagen, "xCreateImageEx_" hat als Return einen pointer.also byte ptr deklariert bekommen. Code: [AUSKLAPPEN] Type FI_SurfacesType
Field Count:Int Global Array:Int[] Field Texture:Int End Type Global FI_Surfaces:FI_SurfacesType = New FI_SurfacesType Function xCreateImageEx:Int(texture:Int, width:Int, height:Int, imageFlags:Int = FI_AUTOFLAGS) If texture <> 0 Then FI_SurfacesType.Array = New Int[256] FI_Surfaces.Texture = texture FI_Surfaces.Count = xGetTextureFrames(texture) If FI_Surfaces.Count>0 Then If FI_Surfaces.Count>256 Then FI_Surfaces.Count=256 For i=0 To FI_Surfaces.Count-1 FI_SurfacesType.Array[i] = xGetTextureSurface(texture, i) Next Return xCreateImageEx_(FI_Surfaces:FI_SurfacesType, width, height, imageFlags) EndIf EndIf Return End Function Function xLoadImageEx:Int (fileName:String, textureFlags:Int = 0, imageFlags:Int = 0) If ImageInfo_ReadFile (fileName) Then Return xCreateImageEx ( xLoadTexture (fileName, textureFlags), ImageInfo_Width, ImageInfo_Height, imageFlags) EndIf Return End Function hat aber auch wieder mit dem type zu tun, oder aber ich hab nen fehler übersehen. |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pointer gibt es nur beschränkt in BlitzMax, aber es gibt Pointer für Byte, Int, Float und Double, allerdings auch nur die.
Pointer auf eigene Types o.ä. wie in C++ gibt es meines Wissens nach nicht, kann mich aber auch irren, wie so oft ![]() Wenn ich dein Problem richtig verstanden habe, was ich glaube nicht richtig habe... Code: [AUSKLAPPEN] Function BlitzMaxFunction:Int Ptr() 'Funktion die einen Pointer auf einen Int zurückgibt
Return DLLFunktion(...) 'Gibt Pointer der Funktion in der DLL zurück EndFunction |
||
Blessed is the mind too small for doubt |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Instanz ist doch schon ein Pointer.
Ein Byte Ptr. Oder? xD |
||
.... |
hamztata |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
im c++ äquivalent gibt die funktion ein int zurück, jedoch innerhalb der funktion ists ein pointer.
hab eben noch mal die c++ sourcen durchgeschaut...es ist so.in bb3d geht das, dort ists einfach immer ein %. so ein mist mist. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group