2008-09-24 3 views
5

Je suis en train de gérer l'événement Winsock_Connect (En fait, je besoin dans Excel macro) en utilisant le code suivant:événement MSWinsock.Winsock manutention dans VisualBasic

Dim Winsock1 As Winsock 'Object type definition 

Sub Init() 
    Set Winsock1 = CreateObject("MSWinsock.Winsock") 'Object initialization 
    Winsock1.RemoteHost = "MyHost" 
    Winsock1.RemotePort = "22" 
    Winsock1.Connect 

    Do While (Winsock1.State <> sckConnected) 
     Sleep 200 
    Loop 
End Sub 

'Callback handler 
Private Sub Winsock1_Connect() 
    MsgBox "Winsock1::Connect" 
End Sub 

Mais il ne va jamais au sous-programme Winsock1_Connect bien Winsock1.State est connecté". Je souhaite utiliser la bibliothèque MS standard car je n'ai pas de droits d'administration sur mon PC et je ne suis pas en mesure d'enregistrer certaines bibliothèques personnalisées. Quelqu'un peut-il me dire où je me trompe?

Répondre

3

Êtes-vous bloqué avec MSWinsock?
Here est un site/tutoriel utilisant un objet winsock personnalisé.

aussi ... Vous devez déclarer Winsock1 WithEvents dans un module "classe":

Private WithEvents Winsock1 As Winsock 

Enfin, assurez-vous référencez le contrôle de Winsock OCX.
Outils -> Références -> Parcourir ->% sysem% \ MSWINSCK.OCX

+0

Le lien vers le 'site/tutoriel' semble être en baisse, probablement pour le bien. – ctbrown

+0

@Nescio Je n'arrive pas à trouver ce fichier n'importe où sur un PC W7 64-bit. Comment puis-je ajouter la référence? – Jaberwocky

0

Documentation sur Winsock contrôle:
http://msdn.microsoft.com/en-us/library/aa228119%28v=vs.60%29.aspx
Exemple ici:
http://support.microsoft.com/kb/163999/en-us

Mon petit exemple avec l'événement traitement en VBscript:

Dim sock 
Set sock = WScript.CreateObject("MSWinsock.Winsock","sock_") 
sock.RemoteHost = "www.yandex.com" 
sock.RemotePort = "80" 
sock.Connect 

Dim received 
received = 0 

Sub sock_Connect() 
    WScript.Echo "[sock] Connection Successful!" 
    sock.SendData "GET/HTTP/1.1"& vbCrLf & "Host: " & sock.RemoteHost & vbCrLf & vbCrLf 
End Sub 

Sub sock_Close() 
    WScript.Echo "[sock] Connection closed!" 
End Sub 

Sub sock_DataArrival(Byval b) 
    Dim data 
    sock.GetData data, vbString 
    received = received + b 
    WScript.Echo "---------------------------------------" 
    WScript.Echo " Bytes received: " & b & " (Total: " & received & ")" 
    WScript.Echo "---------------------------------------" 
    WScript.Echo data 
End Sub 

'Wait for server close connection 
Do While sock.State <> 8 
    rem WScript.Echo sock.State 
    WScript.Sleep 1000 
Loop 

La sortie sera:

cscript /nologo sockhttp.vbs

[sock] Connection Successful! 
------------------------------- 
Bytes received: 1376 (Total: 1376) 
------------------------------- 
HTTP/1.1 200 Ok 
Date: Mon, 08 Dec 2014 15:41:36 GMT 
Content-Type: text/html; charset=UTF-8 
Cache-Control: no-cache,no-store,max-age=0,must-revalidate 
Expires: Mon, 08 Dec 2014 15:41:36 GMT 
... 
Questions connexes