Datei aus dem Web mit VisualBasic 6 öffnen
Hallo zusammen,
ich habe hier ein VB6-Programm, welches monatlich automatisch eine bestimmte PDF-Datei aus dem Web (z.B. http://www.erzbistum-hamburg.de/_amtsblatt/2016/201611.pdf) herunterladen und speichern soll. Die Kernroutine dieser Funktion, das Öffnen der URL, scheint aber seit einem knappen Jahr nicht mehr zu funktionieren. Habt Ihr eine Ahnung, warum - und wie es stattdessen gehen kann?
Danke im Voraus,
Sarek \\//_
ich habe hier ein VB6-Programm, welches monatlich automatisch eine bestimmte PDF-Datei aus dem Web (z.B. http://www.erzbistum-hamburg.de/_amtsblatt/2016/201611.pdf) herunterladen und speichern soll. Die Kernroutine dieser Funktion, das Öffnen der URL, scheint aber seit einem knappen Jahr nicht mehr zu funktionieren. Habt Ihr eine Ahnung, warum - und wie es stattdessen gehen kann?
Public Function OpenURL( _
ByVal URL As String, _
Optional ByVal OpenType As InternetOpenType = IOTPreconfig _
) As String
Const INET_RELOAD = &H80000000
Dim hInet As Long
Dim hURL As Long
Dim Buffer As String * 2048
Dim Bytes As Long
'Inet-Connection öffnen:
hInet = InternetOpenA( _
"VB-Tec:INET", OpenType, _
vbNullString, vbNullString, 0)
hURL = InternetOpenUrlA( _
hInet, URL, vbNullString, 0, INET_RELOAD, 0)
'Daten sammeln:
Do
InternetReadFile hURL, Buffer, Len(Buffer), Bytes
If Bytes = 0 Then Exit Do
OpenURL = OpenURL & Left$(Buffer, Bytes)
Loop
'Inet-Connection schließen:
InternetCloseHandle hURL
InternetCloseHandle hInet
End Function
Danke im Voraus,
Sarek \\//_
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326161
Url: https://administrator.de/forum/datei-aus-dem-web-mit-visualbasic-6-oeffnen-326161.html
Ausgedruckt am: 31.03.2025 um 14:03 Uhr
9 Kommentare
Neuester Kommentar
Hallo Sarek,
Ist dir klar, dass...
Wenn du unbedingt dieses Programm zum Herunterladen deiner Datei verwenden möchtest, solltest du ein Analysetool wie Wireshark zu Rate ziehen. Ich denke, das bringt Licht in's dunkle.
Wenn nicht:
hat in meiner Windows 10 PowerShell sofort zum gewünschten Ergebnis geführt.
funktioniert sogar sowohl dort, als auch woanders ;)
Beste Grüße
Dominique
Ist dir klar, dass...
- die URL, die du angegeben hast, auf eine HTTPS://-Version der URL weiterleitet? (Ich könnte mir vorstellen, hier liegt der Wurm)
- Es quasi unzählig viele Programme gibt, die die von dir geforderte Funktionalität erfüllen?
- Windows(-Anwendungen) (VB6/VS lässt mich davon ausgehen) keine Probleme mit http-Pfaden haben, was das öffnen / kopieren von Dateien angeht
Wenn du unbedingt dieses Programm zum Herunterladen deiner Datei verwenden möchtest, solltest du ein Analysetool wie Wireshark zu Rate ziehen. Ich denke, das bringt Licht in's dunkle.
Wenn nicht:
Invoke-WebRequest "http://www.erzbistum-hamburg.de/_amtsblatt/2016/201611.pdf" -OutFile .\test.pdf
curl "http://www.erzbistum-hamburg.de/_amtsblatt/2016/201611.pdf" -o .\test.pdf
Beste Grüße
Dominique

Diesen VBS-Code kannst du dir mit minimalen Anpassungen an VB auch nehmen:
Gruß mik
Function DownloadFile(ByVal strURL As String, ByVal strTarget As String) As Boolean
On Error GoTo Error
Dim objhttp As Object, objStream As Object
Set objhttp = CreateObject("Microsoft.XMLHTTP")
Set objStream = CreateObject("ADODB.Stream")
With objhttp
.Open "GET", strURL, False
.send
If .Status = 200 Then
objStream.Open
objStream.Type = 1
objStream.Write .responseBody
objStream.SaveToFile strTarget, 2 'Overwrite target
objStream.Close
DownloadFile = True
Else
DownloadFile = False
End If
End With
Exit Function
Error:
DownloadFile = False
End Function

meldet er einen Laufzeitfeler 49: Falsche DLL-Aufrufkonvention.
Ich schätze weil der Rückgabetyp der Funktion (Boolean) nicht deklariert wurde (as Boolean).Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) as Boolean
Für VB6:
und für die genaue Fehlermeldung:
Wenn Du dir das gedönse mit GetlastError sparen möchstest sollte auch ein:
reichen.Wir haben noch einige tausend Anwender die jeden Tag damit Ihre Dateien per HTTP downloaden (VB6 ist einfach nicht tot zu bekommen, nur weil die Anwender keine Updates auf neuere Versionen wollen - Auch hier ist Geiz geil).
MfG
Private Declare Function InternetReadFile Lib "wininet" _
(ByVal hFile As Long, ByVal sBuffer As String, ByVal _
lNumBytesToRead As Long, lNumberOfBytesRead As Long) _
As Integer
und für die genaue Fehlermeldung:
Private Declare Function GetLastError Lib "kernel32" () As Long
Wenn Du dir das gedönse mit GetlastError sparen möchstest sollte auch ein:
debug.print err.LastDllError
reichen.Wir haben noch einige tausend Anwender die jeden Tag damit Ihre Dateien per HTTP downloaden (VB6 ist einfach nicht tot zu bekommen, nur weil die Anwender keine Updates auf neuere Versionen wollen - Auch hier ist Geiz geil).
MfG