DGInt DGNat Probleme

Previous topic - Next topic

Heiko

hier erstmal der code:

Code (glbasic) Select
FUNCTION ImageInfo_ReadTGA:ImageFile%, ImageFileSize%
IF ImageFileSize<24+12 THEN GOTO error5

FILESEEK ImageFile, 0, 1
READBYTE ImageFile, tempg
READBYTE ImageFile, temph
READBYTE ImageFile, tempi
IF tempg=0 AND temph=0 AND tempi=2
ImageInfo_Type = imgtype_TGA
ELSE
GOTO error5
ENDIF

FILESEEK ImageFile, 12, 1
READWORD ImageFile, tempj
READWORD ImageFile, tempk
READWORD ImageFile, templ
ImageInfo_Width = tempj
ImageInfo_Height = tempk
ImageInfo_Depth = templ

RETURN TRUE
error5:
ENDFUNCTION


und die fehlermeldungen:
Code (glbasic) Select
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp: In function `DGInt __GLBASIC__::ImageInfo_ReadTGA(DGNat, DGNat)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:201: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:827: error: in passing argument 2 of `void __GLBASIC__::READBYTE(DGNat, DGNat&)'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:202: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:827: error: in passing argument 2 of `void __GLBASIC__::READBYTE(DGNat, DGNat&)'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:203: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:827: error: in passing argument 2 of `void __GLBASIC__::READBYTE(DGNat, DGNat&)'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:213: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:828: error: in passing argument 2 of `void __GLBASIC__::READWORD(DGNat, DGNat&)'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:214: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:828: error: in passing argument 2 of `void __GLBASIC__::READWORD(DGNat, DGNat&)'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:215: error: invalid initialization of reference of type 'DGNat&' from expression of type 'DGInt'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:828: error: in passing argument 2 of `void __GLBASIC__::READWORD(DGNat, DGNat&)'
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren



ich seh da nicht wirklich durch, hat mit den neuerungen in v6 zu tun.
gabs oder gibts dazu nich irgendwo eine erklärung.
konnte es nicht finden, oder habs mir eingebildet.



achja, mit dem goto haut ja auch was nicht hin....
is auch schon verdammt spät heut.
vielleicht fällt ja jemandem was sinnvolles ein....

ichhab echt wer weiß was probiert.


Schranz0r

Deine Funktion soll ja nur beendet werden wenn was nicht zutrifft. Also reicht dir da ein RETURN FALSE, somit weißt du "Hoppla, da ist was schief gelaufen -> return 0 " ;)

Hier die Funktion:

Code (glbasic) Select
FUNCTION ImageInfo_ReadTGA:ImageFile%, ImageFileSize%
LOCAL tempg%,temph%,tempi%,tempj%,tempk%,templ%

IF ImageFileSize<24+12 THEN RETURN FALSE

FILESEEK ImageFile, 0, 1
READBYTE ImageFile, tempg
READBYTE ImageFile, temph
READBYTE ImageFile, tempi
IF tempg=0 AND temph=0 AND tempi=2
ImageInfo_Type = imgtype_TGA
ELSE
RETURN FALSE
ENDIF

FILESEEK ImageFile, 12, 1
READWORD ImageFile, tempj
READWORD ImageFile, tempk
READWORD ImageFile, templ
ImageInfo_Width = tempj
ImageInfo_Height = tempk
ImageInfo_Depth = templ

RETURN TRUE

ENDFUNCTION
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

#2
achso, ein RETURN FALSE springt aus der Funktion?
gut zu wissen.

und mit dem dgnat etc. war ich zumindest nah dran.
gibts da noch ausführlichere lektüre dazu, also was spezielle änderungen in glb betrifft.

ach und nen vorschlag hätte ich doch gleich mal.
bei zum beispiel readbyte, ist der zweite wert ja sozusagen der rückgabewert.
es wäre einfacher einen richtigen rückgabewert daraus zu machen, spart code.

Also statt   ReadByte wert1, rückgabewert
                rückgabewert = ReadByte wert1

bei codekonstellationen wo das readbyte mehrfach genutzt wird, spart das zeit und ist vorallem übersichtlicher.

Schranz0r

Quote from: Heiko on 2009-Mar-10
achso, ein RETURN FALSE springt aus der Funktion?
gut zu wissen.

Nicht dein ernst oder?
Return beendet immer die Funktion, egal was der return ist!  :bed:
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

#4
oh ähm, mir war so, auch schonmal ein return irgendwo mittendrin gesehen zu haben.... ohne false.

ich dachte bisher return gibt entweder nichts, oder eben irgendetwas zurück, in der hilfe bei funktionen steht nicht mehr dazu.

und ist das eigentlich bei Read....long etc. ebenso(%), oder kommt da wieder was anderes?

Schranz0r

Wenn du nichts returnen willst, dann schreibst du auch kein return rein.
Willst du aber was zurückgeben brauchst du das ja logischerweise.
Aber wenn du jetzt wie bei dir den Fall hast, das du Abfragen in einer Funktion machst, kannst du, wenn die Funktion nicht mehr benötigt wird, sie mit return 0 beenden.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

alles klar, war mir nicht bewußt, daß return 0 bzw. false den unweigerlichen funktionsabbruch hervorruft.


das mit dem readbyte etc. hab ich glaub ich auch gerafft.
aber eins mach tmich grad stutzig.
in der hilfe steht    READBYTE channel%, val%%     
warum zwei %% bei var%%  ?

Schranz0r

Weil es ein return(byref) aus der Funktion READBYTE ist

var% = der will einen Wert von dir
var%% =  der gibt einen Wert zurück!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

achso, also als anwender unwichtig, da man es sowie so mit nur einem % schreibt.
hab meinen code dank dir nun fertig.
das einzige frage die ich mir noch stelle ist, warum man das bei readbyte etc. machen MUSS.
Eine Liste mit solchen festgelegten Sachen wäre nicht schlecht.

Nunja, ich weiß es ja jetzt.
Hoffe es beschränkt sich mit den gezwungenen datentypen auf die read und write befehle, oder gibts das noch woanders?

so, aber das wars für heute......danke dir nochmal Schranz0r

Schranz0r

ist nur bei Read und Write!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

danke dir.
Gottseidank.
Hatte gestern hier mit der Suche gestöbert, und # als deklarierung gefunden, wo jetzt doch fast überall % genommen wird.
Aber ich schreib mir für alles was mit READ und WRITE zu tun hat, jetzt eigene Funktionen, weil das da dann mit dem Rückgabewert einfacher ist.
Außerdem kann ich das dann da gleich mit in die Funktionen einbauen.

[edit]

jetzt gibts in meinem code plötzlich nen fehler der vorher nicht da war....komisch...

Code (glbasic) Select
FUNCTION PEEKLONG%: ibank%, position%
INLINE
unsigned char* pBytes = &gMemBanks(ibank)[position];
   RETURN *((int*)pBytes);
ENDINLINE
ENDFUNCTION


FUNCTION FREEBANK: ibank%
INLINE
   IF(gMemBanks(ibank))
   {
      DELETE[] gMemBanks(ibank);
      gMemBanks(ibank) = 0L;
   }
ENDINLINE
ENDFUNCTION


Code (glbasic) Select
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp: In function `DGNat __GLBASIC__::PEEKLONG(DGNat, DGNat)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:345: error: `RETURN' was not declared in this scope
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp: In function `DGInt __GLBASIC__::FREEBANK(DGNat)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:356: error: `IF' was not declared in this scope
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp3.cpp:357: error: expected `;' before '{' token

Schranz0r

steht doch da:

Code (glbasic) Select
error: `RETURN' was not declared in this scope

RETURN muss im inline return sein

Code (glbasic) Select
error: `IF' was not declared in this scope

IF muss zu if werden im inline!

Fehlerursache:

Du hattest den Codeblock auskommentiert und dann wieder entkommentiert, dadurch kommt dann sowas zu stande ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

#12
ach mist bin ich doof....asche auf mein haupt...... :whistle:

DELETE muss übrigends auch wieder klein geschrieben werden.

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

hab nochmal kurz eine frage zu den datentypen...

Code (glbasic) Select
READSTR channel%, val$#, nc%
READLINE channel%, val$#


mir ist klar dass val nun ein string oder ein float sei kann.
aber wie definiert man das als local?
beide zeichen setzen geht nicht.