2011-06-27 31 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 

在這種情況下,指數是在數組中控件的索引,所以你不需要跟蹤控制你自己。

希望這會有所幫助...玩得開心! :)