DLL-Fehler -> "_ResourceGetAsString"

  • Im Moment versuche ich gerade einen Text aus einer dll zu holen.
    Dazu verwende ich die "resources.au3" und die Funktion "_ResourceGetAsString"
    Die Ressource lautet "SOURCE" und ist als "RCData" in der "data.dll" gespeichert.

    Jedoch kommt immer eine Fehlermeldung (siehe Bemerkung Spoiler)!

    Spoiler anzeigen
    [autoit]

    #include "resources.au3"
    $res = _ResourceGetAsString("SOURCE", $RT_RCDATA, 0, @ScriptDir & "\data.dll")
    ConsoleWrite($res & @lf)

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

    #cs
    Func _ResourceGetAsString($ResName, $ResType = 10, $ResLang = 0, $DLL = -1) ; $RT_RCDATA = 10
    Local $ResPointer, $ResSize, $structda
    -> FUNKTIONIERT HIER NOCH. GIBT WERT AUS!
    $ResPointer = _ResourceGet($ResName, $ResType, $ResLang, $DLL)
    If @error Then
    SetError(1, 0, 0)
    Return ''
    EndIf
    -> AB HIER KOMMT DIE FEHLERMELDUNG!
    $ResSize = @extended
    $struct = DllStructCreate("char[" & $ResSize & "]", $ResPointer)
    Return DllStructGetData($struct, 1) ; returns string
    EndFunc
    #ce

    [/autoit]

    Die Ressource.au3, das Script und die Dll sind angehängt.

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    $res = _StringFromResource( @ScriptDir & "\data.dll",0)
    ConsoleWrite($res & @lf)

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

    Func _StringFromResource($Resfile , $iIndex)
    Local $hInstance, $sText
    If $Resfile = -1 Then; Resfile = Executable Autoit Exe
    $hinstance = _WinAPI_GetModuleHandle("")
    If @error Then Return SetError(1, 0, 0)
    Else
    $hinstance = _WinAPI_LoadLibrary($Resfile)
    If @error Then Return SetError(2, 0, 0)
    EndIf
    $sText = _WinAPI_LoadString($hInstance, $iIndex)
    If @error Then Return SetError(5, 0, 0)

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

    If $Resfile <> -1 Then _WinAPI_FreeLibrary($hInstance)
    Return $sText
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Verdammt...ich sollte woll dazusagen, das ich das nicht als String speichern wollte. Da ich ein ganzes HTML-Dokument oder andere große Sachen speichern möchte. Aber danke für deinen Ansatz(kannte ich schon)! :)

  • Problem gelöst.
    Lag daran, das bei der Funktion: "_ResourceGet" am Ende "_WinAPI_FreeLibrary($hInstance)" weg musste.
    @Danke Raupi, für den Tip ;)