Array Denkfehler?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Barbossa155
Posts: 30
Joined: 13 Feb 2016, 07:31

Array Denkfehler?

15 May 2016, 04:27

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
..
HotKeyIt
Posts: 2364
Joined: 29 Sep 2013, 18:35
Contact:

Re: Array Denkfehler?

15 May 2016, 04:40

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.
just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Array Denkfehler?

15 May 2016, 05:35

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.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 58 guests