Page 1 of 1

Array Denkfehler?

Posted: 15 May 2016, 04:27
by Barbossa155
Hi

Habe grade einen wahrscheinlich kleinen Denkfehler und zwar möchte ich nur meine Datentypengröße über einen Array ausgeben lassen

Code: Select all

global sizeofDataType := {   "UChar":    1,  "Char":     1
			             ,   "UShort":   2,  "Short":    2
			             ,   "UInt":     4,  "Int":      4
			             ,   "UFloat":   4,  "Float":    4
			             ,   "Int64":    8,  "Double":   8}
			             
sizeof(datatype)
{   return sizeofDataType.datatype
}

; mit sizeofDataType.Float funktioniers natürlich..

size := sizeof(Float)		             		             
Ausgeben wird nichts.

Danke
..

Re: Array Denkfehler?

Posted: 15 May 2016, 04:40
by HotKeyIt

Code: Select all

global sizeofDataType := {   UChar:    1,  Char:     1
			             ,   UShort:   2,  Short:    2
			             ,   UInt:     4,  Int:      4
			             ,   UFloat:   4,  Float:    4
			             ,   Int64:    8,  Double:   8}
 
sizeof(datatype)
{   return sizeofDataType[datatype]
}
MsgBox % size := sizeof("Float")
Ich würde dir empfehlen einfach AutoHotkey_H zu benutzen, da gibt es bereits eine eingebaute sizeof() Funktion.

Re: Array Denkfehler?

Posted: 15 May 2016, 05:35
by just me
Die Anführungszeichen in Deinem Array sind an sich nicht falsch, werden aber nicht gebraucht, wenn die Keys wie hier nur aus 'Wortzeichen' bestehen (Assoziative Arrays).

Wenn Du die 'Objektsyntax' sizeofDataType.datatype benutzt, muss der Keyname nach dem Punkt einem vorhandenen Key entsprechen. Deswegen funktioniert sizeofDataType.Float 'natürlich'.

Und, wenn Du Dir ein globales Array gebastelt hast, brauchst Du eigentlich keine separate Funktion:

Code: Select all

Global sizeof := {   UChar:    1,  Char:     1
                 ,   UShort:   2,  Short:    2
                 ,   UInt:     4,  Int:      4
                 ,   UFloat:   4,  Float:    4
                 ,   Int64:    8,  Double:   8
                 ,   UPtr:     A_PtrSize
                 ,   Ptr:      A_PtrSize     }

MsgBox, 0, Float, % sizeof["Float"]
DataType := "Double"
MsgBox, 0, Double, % sizeof[DataType]
Die in AutoHotkey_H eingebaute Funktion sizeof() ist an sich recht zuverlässig, schwächelt aber zumindest immer dann, wenn sich der Entwickler einer Struktur dafür entschieden hat, von der Standardfeldausrichtung abzuweichen. Ich sähe da gern zwei zusätzliche Optionen:
  1. Packn, Pack32n (oder ähnlich) für die Feldausrichtung.
  2. X32 / X64 (oder ähnlich) für die Vorgabe der Zielarchitektur.