Toon posts:

{vb} winsock in klasse

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heyz

ik heb in m'n klasse winsock nodig.
ik define deze als winsock & ik kan connecten op een server (krijg toch geen errors ;))

<code>
Dim ServerCon As Winsock
ServerCon.Connect "192.168.0.66", 25
</code>

maar eumz, hoe onderschep ik nu
Private Sub ServerCon_DataArrival(ByVal bytesTotal As Long)
&
Private Sub ServerCon_Connect()

Wanneer ik deze subs in de klasse zet reageren zij niet / worden ze niet aangesproken ...

Iemand die raad weet ?

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Dat ging toch met ...
code:
1
Dim WithEvents VarNaam As VarType

SIZE does matter.
"You're go at throttle up!"


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02:18

Gerco

Professional Newbie

Inderdaad, je kunt een van een WithEvents variabele de events opvangen. Let wel, dit kan ALLEEN in een Form of Class, NIET in een module (voor zover ik weet)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Heb dus nu hetvolgende in global staan:
code:
1
Dim WithEvents ServerCon As Winsock

maar krijg nog steeds geen reactie wanneer ik connect
code:
1
2
3
Private Sub ServerCon_Connect()
DbG ("Connecting")
...

Verwijderd

Je hebt nu nog alleen vertelt dat een variabele van een bepaalde type is. Nu moet je hem nog creeeren.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private WithEvents m_objWinSock As MSWinSockLib.Winsock

Private Sub Class_Initialize()
    Set m_objWinSock = New MSWinSockLib.Winsock
    Let m_objWinSock.LocalPort = 113 'Of iets anders natuurlijk
    Call m_objWinSock.Listen
End Sub

Private Sub Class_Terminate()
    If Not m_objWinSock Is Nothing Then
      If m_objWinSock.State = sckConnected Then
        Call m_objWinSock.Close
      End If
    End If
    Set m_objWinSock = Nothing
End Sub

  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

Ik heb ook eens geprobeerd een soortement extended WinSock control te maken in een class, maar dat is me niet gelukt.
Voor zover ik weet moet een WinSock control op een container (form) staan, en werkt ie niet vanuit code alleen. Het control heeft namelijk een window nodig om de WinSock messages op te ontvangen, en ik dacht dat daarvoor het container window werd gebruikt.
Ik gebruikte exact dezelfde code als Debbus hierboven postte (een instantie maken in de Initialize event, en het object opruimen in de Terminate event, en dan verder in de class gewoon de methoden van de WinSock control aanroepen) maar dat werkte dus niet.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14:16

Crazy D

I think we should take a look.

Op zaterdag 13 april 2002 19:54 schreef johnwoo het volgende:
Ik heb ook eens geprobeerd een soortement extended WinSock control te maken in een class, maar dat is me niet gelukt.
Voor zover ik weet moet een WinSock control op een container (form) staan, en werkt ie niet vanuit code alleen.
Klopt, maar je kunt dan nog steeds een extended class maken. Dim je variable WithEvents, en gebruik een init functie die als parameter een Winsock control wil hebben, en roep deze aan vanuit je form (daar moet je dan nog wel een winsock control op plaatsen). Daarna kun je in je class de events ed. afvangen.

Voorbeeldje met textbox:
class-code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit

Private WithEvents m_Text As TextBox

Public Sub Init(ByRef ptControl As TextBox)
    Set m_Text = ptControl
End Sub

Private Sub Class_Terminate()
    Set m_Text = Nothing
End Sub

Private Sub m_Text_Change()
    Stop
End Sub

En aanroepen vanuit je form als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit

Private m As Class1

Private Sub Form_Load()
    Set m = New Class1
    Call m.Init(Text1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set m = Nothing
End Sub

(waarbij Text1 uiteraard je textboxje is)
Als je 'm runt en wat intiept, zal je VB in breakmode in het changeevent. Ik zou niet weten waarom dit niet zal werken met een winsock control...

Exact expert nodig?


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02:18

Gerco

Professional Newbie

Als je dat idee verder wil uitwerken, maak je een ExtWinSock.dll met een form erin met zo'n control erop. Dan kun je je ExtWinSock wel 100% vanuit code besturen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Op zaterdag 13 april 2002 19:54 schreef johnwoo het volgende:
Ik gebruikte exact dezelfde code als Debbus hierboven postte (een instantie maken in de Initialize event, en het object opruimen in de Terminate event, en dan verder in de class gewoon de methoden van de WinSock control aanroepen) maar dat werkte dus niet.
De code die ik heb gepost heb ik niet zomaar verzonnen... Dit is gekopieerd uit een VB-project waar ik nu mee bezig ben en het werkt bij mij perfect.

Verwijderd

Topicstarter
Op zaterdag 13 april 2002 19:03 schreef Debbus het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private WithEvents m_objWinSock As MSWinSockLib.Winsock

Private Sub Class_Initialize()
    Set m_objWinSock = New MSWinSockLib.Winsock
    Let m_objWinSock.LocalPort = 113 'Of iets anders natuurlijk
    Call m_objWinSock.Listen
End Sub

Private Sub Class_Terminate()
    If Not m_objWinSock Is Nothing Then
      If m_objWinSock.State = sckConnected Then
        Call m_objWinSock.Close
      End If
    End If
    Set m_objWinSock = Nothing
End Sub
welke references moet ik hiervoor laden ?
op dit moment heb ik enkel het winsock-component staan...

wanneer ik 'set x = new' typ komt er een lijstje zonder MSWinSockLib...

sry for my n00b'ism ;)

Verwijderd

Topicstarter
hehe, gevonden ondertss.
wat googlen kan soms toch eens goed doen ;)

voor mensen die het zou intresseren, uitgebreide uitleg op http://www.aspzone.com/articles/john/HTTPComponent/HTTPComponent.asp

tnx!

Verwijderd

Topicstarter
Mmz, problem still not solved.
Denk dat het probleem hetvolgende is:

de klasse wordt ge-initialized & enkele commands worden uitgevoerd, o.a. winsock.connect
MAAR
nog voor dat de winsock reactie krijgt terminate de klasse reeds...

iemand die me hieruit verder zou kunnen helpen ?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14:16

Crazy D

I think we should take a look.

Waar dim en initializeer je je winsock-class?

Exact expert nodig?

Pagina: 1