我在一个CLASS中需要用 Winsock 这个控件,请问我怎么写收取数据的事件?

解决方案 »

  1.   

    Private WithEvents Sock As MSWinsockLib.WinsockPrivate Sub Sock_DataArrival(ByVal bytesTotal As Long)
    ..........
    end sub
      

  2.   

    为什么我在使用
    Private WithEvents Sock As MSWinsockLib.Winsock
    申明了一个 Sock
    但是在类编译成DLL在其他程序里调用它的时候,却出现“实时错误'91' 未设置对象变量或 with block 变量”
      

  3.   

    Private WithEvents Sock As New MSWinsockLib.Winsock
    加个new吧。
      

  4.   

    还要你不要抱一个winsock控件在你的dll文件里面。不然编译的时候会把winsock控件的有关信息去掉的。
      

  5.   

    还有你要包一个winsock控件在你的dll文件里面。不然编译的时候会把winsock控件的有关信息去掉的。
    不好意思,打字打错了。再发一次。
      

  6.   

    Private WithEvents Sock As New MSWinsockLib.Winsock------WithEvents 后不可以用New,这是vb的语法要求。可以在你的DLL工程加一个Form,把所有的WinSock处理放在Form中,这样就可以普通的Exe是一样的,
    只需要在通过ActiveX Dll定义类的方法或者事件,调用Form中的处理就可以了。
      

  7.   

    Private WithEvents Sock As MSWinsockLib.Winsock
    Set sock1 as new MSWinsockLib.Winsock with events
    Private Sub Sock1_DataArrival(ByVal bytesTotal As Long)
    ..........
    end sub瞎写的试试看吧
      

  8.   

    Private WithEvents Sock As MSWinsockLib.Winsock只是声明,但是没有创建,所以提示 【未设置对象变量】
      

  9.   

    这个错误我来解释一下。Private WithEvents Sock As MSWinsockLib.Winsock这个语句只是声明了一个对象变量Sock,它是MSWinsockLib.Winsock类型的,这是Object类型的一个派生。声明这个变量的过程中只是给变量划定了内存地址范围,而这段内存地址中的数据是未经初始化的,也就是说这个变量没有承载任何内容。就好比声明Long型变量,它的初始值是vbNull,或者String型变量,初始值为vbNullString,Object及其派生类型变量的初始值是Nothing。如果此时调用这个变量,无论是它的属性抑或是它的方法,实际上都在访问内容为空的内存地址,即访问Nothing的属性或者方法,这时必然引起错误。
    使用语句Set Sock = New MSWinsockLib.Winsock 便是将 MSWinsockLib.Winsock 的一个新实例赋值给Sock变量,也就可以理解为 Sock变量对应的内存地址承载着MSWinsockLib.Winsock 的一个新实例,这样就可以通过访问这个变量来访问这个实例的属性和方法,并可以在这个实例的事件触发之后反应到Sock的事件之上。
      

  10.   

    补一句,建议把Set Sock = New MSWinsockLib.Winsock 这句写在Class_Initialize过程里面。
      

  11.   

    感谢楼上的解答,但是Set Sock = New MSWinsockLib.Winsock 报告错误,说New关键字用错了
      

  12.   

    是这样的,如果你只是在class中使用winsock,应该从引用中加载winsock而不是从部件中加载。
    具体的方法是,先单击工程|部件,在弹出的窗口中去掉Microsoft Winsock Control,确定,然后在工程|引用中点浏览,选择%systemroot%\mswinsck.ocx,确定,确定,这样就可以了。
      

  13.   

    成功了!谢谢 sworddx !!! 诲人不倦啊……
      

  14.   

    请问 sworddx(.:RNPA:. Hillinsilence;剑宇潇湘·秋叶原 Reloaded) 高手...
    如果我要使用Timer怎么办啊?Timer属于VB库,按照上述类似的方法行不通啊...
      

  15.   

    没办法,使用Timer APIs来实现吧,我没有经验,所以帮不了你了。