Ca m'enerve ce module fait tout planter ! Aidez moi c'est tres important !

Remixgame Messages postés 56 Date d'inscription mardi 12 février 2002 Statut Membre Dernière intervention 2 août 2007 - 23 août 2002 à 18:37
couriousous Messages postés 68 Date d'inscription lundi 21 mai 2001 Statut Membre Dernière intervention 4 janvier 2003 - 25 août 2002 à 15:36
J'ai un prob avec ce module que je vous affiche
après des que je fais appelle à celui ci
exemple call download("www.truc.com/grosfichier.exe","c:\grosfff.exe)
le programme ne répond pas jusqu'a ce qu'il est fini de télécharger le fichier pourquoi ????
aidez moi !!!

Option Explicit

Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_OPEN_TYPE_PROXY = 3

Public Const scUserAgent = "VB OpenUrl"
Public Const INTERNET_FLAG_RELOAD = &H80000000

Sub Download(URL As String, SaveAs As String)

Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String

hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, URL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)

bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False


Wend

Open SaveAs For Binary Access Write As #1
Put #1, , sBuffer
Close #1

If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)

End Sub

AIDEZ MOI C'est IMPORTANT

4 réponses

JeffLC Messages postés 73 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 20 février 2003
23 août 2002 à 19:03
Lorsqu'un Process VB s'effecute, il prime sur tout les autres. Dans ton cas la boucle While Wend servant à lire le contenu du fichier bloque les autres process. Donc la solution est d'encapsuler ta procédure de lecture dans un composant activeX ou tu peux ne lire qu'a intervalle régulier par un timer, mais la meilleure solution reste l'externalisation des opérations longues.
0
Remixgame Messages postés 56 Date d'inscription mardi 12 février 2002 Statut Membre Dernière intervention 2 août 2007
23 août 2002 à 19:23
Mais dans ce cas la comment dois je faire pour le mettre en active X ?
comment faire pour que ca marche
J'aurais bien aimé aussi mettre une progressbar pour voir l'avance du téléchargement du fichier ?
Comment connaitre les bytes lu et les bytes totales aide moi merci
Merci
0
MysTiK74 Messages postés 32 Date d'inscription vendredi 23 août 2002 Statut Membre Dernière intervention 7 mars 2003
23 août 2002 à 22:23
Adieu p'tit

insere un doevents dans ton while
0
couriousous Messages postés 68 Date d'inscription lundi 21 mai 2001 Statut Membre Dernière intervention 4 janvier 2003
25 août 2002 à 15:36
Si tu voulait faire tout ca, fallait utiliser Winsock (plus simple à mon gout et plus souple.) . Et laisse tomber les ActiveX sa alourdi le programme (et donc les plantages) pour trois fois rien. Met juste un DoEvents dans ta boucle et t'aura plus de problèmes!

couriousous
0
Rejoignez-nous