Dll Problem

  • Hi,
    hab auch mal angefangen mich mit Dll's zu beschäftigen und hab schon das erste Problem mit meinem Script.

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

    $sdlinit = SDL_Init("SDL_INIT_VIDEO")

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

    MsgBox(0, "SDL_Init", $sdlinit)
    Exit

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

    Func SDL_Init($flag)
    $sdl = DllOpen("SDL.dll")
    DllCall($sdl, "int", "SDL_Init", "uint32", $flag)
    EndFunc

    [/autoit]

    Hab die Informationen über die Dll Funktionen und Parameter von http://sdl.beuc.net/sdl.wiki/SDL_Init.
    Der DllCall müsste eigentlich soweit stimmen, das Problem ist aber das ich immer in der MsgBox 0 angezeigt bekomme, was laut Doku auch den Erfolg der Funktion bedeutet.
    Ich kann jedoch irgendeine selbst ausgedachte Funktion in den DllCall packen und erhalte immer noch 0.


    Falls wer nicht weis was SDL ist wird hier schlauer.
    Hab die Dll auch mal in den Anhang gepackt.

    Kann mir einer sagen was ich falsch gemacht habe?
    Bin atm irgendwie ziemlich verwirrt. :S

    MfG

    Bladerunner ;)

  • Hallo Bladerunner85,

    teste es mal so:

    Spoiler anzeigen
    [autoit]

    $sdlinit = SDL_Init("SDL_INIT_VIDEO")

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

    MsgBox(0, "SDL_Init", $sdlinit)
    Exit

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

    Func SDL_Init($flag)
    $sdl = DllOpen("SDL.dll")
    $result=DllCall($sdl, "int", "SDL_Init", "uint32", $flag)
    return $result
    EndFunc

    [/autoit]

    mfg (Auto)Bert

  • Danke

    autoBert
    funktioniert aber leider auch nicht.
    Ich kann auch anstatt SDL.dll irgendwas anderes hinschreiben und bekomme immer noch 0.

    @Pinguin94
    meinste so:

    [autoit]


    $sdlinit = SDL_Init("SDL_INIT_VIDEO")

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

    MsgBox(0, "SDL_Init", $sdlinit[0])
    Exit

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

    Func SDL_Init($flag)
    $sdl = DllOpen("SDL.dll")
    $result=DllCall($sdl, "int", "Snit", "uint32", $flag)
    return $result[0]
    EndFunc

    [/autoit]

    Funktioniert auch nicht.

  • Versuch mal so:

    Spoiler anzeigen
    [autoit]

    $sdlinit = SDL_Init("SDL_INIT_VIDEO")

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

    MsgBox(0, "SDL_Init", $sdlinit)
    Exit

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

    Func SDL_Init($iFlag,$hDLL = "SDL.dll")
    Local $aResult = DllCall($hDLL, "int", "Snit", "uint32", $iFlag)
    If Not @error Then Return $aResult[0]
    Return -1
    EndFunc ;==>SDL_Init

    [/autoit]
  • Hi,
    danke an alle ;) .

    Habs jetzt hinbekommen:

    [autoit]


    $sdlinit = SDL_Init("SDL_INIT_VIDEO")

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

    MsgBox(0, "SDL_Init", $sdlinit)
    Exit

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

    Func SDL_Init($iFlag,$hDLL = "SDL.dll")
    Local $aResult = DllCall($hDLL, "int:cdecl", "SDL_Init", "uint", $iFlag)
    If Not @error Then Return $aResult[0]
    Return -1
    EndFunc ;==>SDL_Init

    [/autoit]

    Ich hatte die Funktion falsch aufgerufen.
    Da es schon eine SDL UDF gibt konnte ich mir daraus ein paar Infos daraus holen.
    Werd trotzdem mal versuchen eine kleine UDF zu basteln, die nur die Hauptfunktionen von SDL enthält.

    MfG

    Bladerunner

  • Das DLLOpen ist sehr wichtig, das darfst du nicht weglassen. Also solltest du auf jeden Fall eine globale Variable Erstellen und dann die DLL in einer _SQL_Startup-Funktion per DLLOpen zu laden.

    PS: SDL_Init("SDL_INIT_VIDEO") ist nicht korrekt. SDL_INIT_VIDEO ist eine Konstante, die einen bestimmten Nummernwert besitzt. Es muss also so lauten:

    [autoit]

    Global Const $SDL_INIT_VIDEO = ...
    SDL_Init($SDL_INIT_VIDEO)

    [/autoit]
  • Ah...
    danke progany

    jetzt weis ich warum mein Script immer abgestürzt ist^^