2008-09-24 13 views
5

Estoy tratando de controlar el evento Winsock_Connect caso MSWinsock.Winsock (En realidad lo necesito en Excel macro) usando el siguiente código:manejo en 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 

Pero nunca se va a Winsock1_Connect subrutina aunque Winsock1.State está conectado". Quiero usar la biblioteca MS estándar porque no tengo derechos administrativos en mi PC y no puedo registrar algunas bibliotecas personalizadas. ¿Alguien puede decirme dónde estoy equivocado?

Respuesta

3

¿Estás atascado con MSWinsock?
Here es un sitio/tutorial que utiliza un objeto winsock personalizado.

también ... tiene que declarar Winsock1 WithEvents dentro de un módulo de "clase":

Private WithEvents Winsock1 As Winsock 

Y, por último, asegúrese de que se hace referencia el control OCX Winsock.
Herramientas -> Referencias -> Consulta ->% sysem% \ MSWINSCK.OCX

+0

El enlace con el 'site/tutorial' parece estar abajo, probablemente para siempre. – ctbrown

+0

@Nescio Parece que no puedo encontrar este archivo en ninguna parte en una PC con W7 de 64 bits. ¿Cómo puedo agregar la referencia? – Jaberwocky

0

Documentación sobre control Winsock:
http://msdn.microsoft.com/en-us/library/aa228119%28v=vs.60%29.aspx
Ejemplo aquí:
http://support.microsoft.com/kb/163999/en-us

Mi pequeño ejemplo con el evento manejo 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 

Salida será:

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 
...