seltsam seltsam dllstructcreate spinnt?

  • hi...

    Ich habe folgenden Code:

    [autoit]

    $str = DllStructCreate("int;char[256]")
    DllStructSetData($str,1,100)
    DllStructSetData($str,2,"hallo")
    MsgBox(0,"",DllStructGetData($str,1)&@CRLF&DllStructGetData($str,2))

    [/autoit]

    der funktioniert auch wunderbar... nur will ich den pointer vorgeben:

    [autoit]

    $str = DllStructCreate("int;char[256]",1337)
    DllStructSetData($str,1,100)
    DllStructSetData($str,2,"hallo")
    MsgBox(0,"",DllStructGetData($str,1)&@CRLF&DllStructGetData($str,2))

    [/autoit]


    und schwupsdiwups meldet sich windows mit der schönen fehlerweldung, das autoit ein problem festgestellt hat und beendet werden muss :(

    jemand ne idee was daran falsch ist?


    grez

  • wie kann der Pointer falsch sein? den darf man sich doch selbst raussuchen, oder?

  • Du kannst nicht einfach irgendeine beliebige Zahl als Speicheradresse eintragen.
    Du weißt ja gar nicht ob dieser Speicherbereich überhaupt frei ist und das Betriebssystem weiß auch gar nicht das du diesen Platz benutzt.
    Du musst schon einen Speicherbereich korrekt allokieren - anders geht es nicht.
    Würde z.B. so aussehen:

    [autoit]

    #Include <Memory.au3>

    [/autoit][autoit][/autoit][autoit]

    $Pointer = _MemGlobalAlloc(256 + 4)

    [/autoit][autoit][/autoit][autoit]

    $str = DllStructCreate("int;char[256]",$Pointer)
    DllStructSetData($str,1,100)
    DllStructSetData($str,2,"hallo")
    MsgBox(0,"",DllStructGetData($str,1)&@CRLF&DllStructGetData($str,2))

    [/autoit]

    Ist aber sinnlos das DLLStructCreate sowieso einen Speicherbereich automatisch allokiert - das wär zumindestens mal der manuelle Weg welcher aber auch zusätzliche Fehlerquellen wie z.b. die falsche Größenangabe oder mit sich bringt.
    Kurzum: Lass alles wie gehabt - ist der beste Weg.