2011-06-27 33 views
1

我用下面的代码,以动态创建Winsock控件并用它连接到服务器:VB6动态添加Winsock控件

Licenses.Add "MSWinsock.WinSock.1" 
Controls.Add "MSWinsock.WinSock.1", "s1" 

s1.RemoteHost = "irc.netsplit.de" 
s1.RemotePort = "6667" 
s1.Connect 

但是我得到“错误424:所需的对象”,突出“s1.RemoteHost ...”,我该如何解决这个问题?应该从前面的行添加控件?

谢谢。

回答

2

最简单的方法是将一个套接字控件转储到表单以否定导入许可证的需要&然后得到严格的输入;

Controls.Add "MSWinsock.WinSock.1", "s1" 

Dim s1 As Winsock: Set s1 = Controls("s1") 
s1.RemoteHost = "irc.netsplit.de" 

或者也许array of sockets是你的后?

+1

只是'Dim s1 Winsock'和'Set s1 = Controls.Add(“MSWinsock.WinSock.1”,“myUniqueNameHere”)'就足够了。 – wqw

0

您没有申请变数s1。您只是将控件添加到具有该名称的表单中。您可以使用检索:

Dim s1 As Object 
s1 = Controls("s1") 

我VB6是生锈的,虽然如此,我不知道,这是一个Object,你可以有意识地对它的工作。

1

对不起,我的英语不好...

您可以制作WinSock控件的数组。要做到这一点,你需要添加一个控制,形成和它的索引属性分配为0,然后你可以使用的语句是这样的:

Load WinSock1(5) 

其中为Winsock1是控制(先前添加的形成)的名称,以及5是新控件数组中的索引(可能是一个变量)。这意味着你有多个相同控制的“副本”,你可以单独操作。之后,你可以用这个控制这样的操作:

WinSock1(5).LocalPort = 80 
Winsock1(5).Listen 

和这样的事件作出回应:

Private Sub WinSock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) 
WinSock1(Index).Close 
WinSock1(Index).Accept(requestID) 
End Sub 

在这种情况下,指数是在数组中控件的索引,所以你不需要跟踪控制你自己。

希望这会有所帮助...玩得开心! :)