Dokument von URL downloaden (inkl. System.AccessViolationException Behandlung)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Dokument von URL downloaden (inkl. System.AccessViolationException Behandlung)

    Moin Leute,

    ich bin auf einen Fehler gestoßen, der mich bekloppt gemacht hat. Nach ewiger Suche habe ich die Lösung gefunden und möchte denen, die diesen Fehler auch haben, helfen.

    Folgende Situation:

    Ich habe ein WebbrowserControl und möchte ein Dokument herunterladen, welches im Wbc angezeigt wird.

    Dafür findet man im Netz diese Funktion:

    VB.NET-Quellcode

    1. Private Shared Function URLDownloadToFile( pCaller As Long,szURL As String, szFileName As String, dwReserved As Int32, lpfnCB As Long) As Int32
    2. End Function


    Klappt bei Windows 64bit teilweise auch ohne Probleme.
    Bei einem 32bit System liest man folgendeS:

    System.AccessViolationException wurde nicht behandelt.
    Message="Es wurde versucht, im geschützten Speicher zu lesen oder zu
    schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher
    beschädigt ist."

    Zu dieser Meldung habe ich den Debugger gefühlt studiert und einfach keine Lösung entdeckt.
    Dann wurde mir aber klar, dass die Long Variablen hier einfach nicht passen können.
    Liest man die Funktion nach, so erfährt man, dass nicht ein Long Wert sondern ein IntPtr Wert erwartet wird.
    Machen wir das ganze einfach vollständig und perfekt:

    VB.NET-Quellcode

    1. <DllImport("urlmon.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    2. Private Shared Function URLDownloadToFile(<MarshalAs(UnmanagedType.IUnknown)> pCaller As Object, <MarshalAs(UnmanagedType.LPWStr)> szURL As String, <MarshalAs(UnmanagedType.LPWStr)> szFileName As String, dwReserved As Int32, lpfnCB As IntPtr) As Int32
    3. End Function


    Das Downloaden von Dokumenten ist somit kein Problem mehr.

    Ist wahrscheinlich ein Fehler, den kaum jemand bekommen wird. Sollte es jedoch der Fall sein, hoffe ich, dass diese Lösung euch hilft :)

    *Topic verschoben*
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()