Ciao a tutti, ho un problema con VB6 e Winsock che non riesco proprio a risolvere, sto scrivendo una DLL in VB6 che contiene una sola classe che espone una sola funzione.
Tale funzione dovrebbe chiamare un indirizzo web, eseguire il parsing del testo ricevuto come risposta e restituire una parte del testo ricevuto.
Ho incluso la libreria Winsock (MSWINSCK.OCX) come reference del progetto, all'interno della funzione istanzio un oggetto Winsock ed eseguo la connessione, la richiesta Http ed infine leggo la risposta.
I test sono stati eseguiti attraverso un form che istanzia l'oggetto della DLL, chiama la funzione e mostra il risultato in una TextBox.
Di seguito la funzione:
Il problema consiste nel fatto che la variabile tmpHttpResponse alla fine dell'esecuzione della funzione risulta essere vuota.codice:Public Function getSubstring(ByVal siteAddress As String) As String Dim winSck As Winsock Set winSck = New Winsock Dim tmpHttpRequest As String Dim tmpHttpResponse As String Dim tmpVariable As Integer tmpHttpRequest = "GET / HTTP/1.1" & vbNewLine & _ "Host: " & siteAddress & vbNewLine & _ "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" & vbNewLine & _ "Accept: text/plain, text/html" & vbNewLine & _ "Accept-Language: en" & vbNewLine & _ "Accept-Charset: utf-8" & vbNewLine & _ "Pragma: no-cache" & vbNewLine & _ "Connection: close" & vbNewLine & vbNewLine tmpHttpResponse = Empty winSck.RemoteHost = siteAddress winSck.RemotePort = 80 If winSck.State <> sckClosed Then winSck.Close winSck.Connect Do While winSck.State <> sckConnected DoEvents Loop If winSck.State = sckConnected Then winSck.SendData tmpHttpRequest winSck.GetData tmpHttpResponse, vbString winSck.Close getSubstring = processResponse(tmpHttpResponse) End Function
Aggiungo un po' di informazioni raccolte nel corso del debugging:
- se inserisco un breakpoint all'inizio della funzione e faccio procedere il programma "manualmente" (F8, F8, F8, etc) la variabile viene correttamente valorizzata, se lo eseguo senza breakpoint la stringa è vuota;
- winSck.GetData e winSck.PeekData forniscono lo stesso risultato (stringa vuota);
- ho inserito uno sleep prima dell'istruzione winSck.GetData (ho provato con tempi di attesa variabili da 0,5 fino a 8 secondi), il risultato non cambia (stringa vuota).
Non riesco proprio a capire dov'è l'errore, ringrazio tutti anticipatamente per qualsiasi aiuto o suggerimento.
Ciao