VB6: динамическое добавление Winsock Control - PullRequest
1 голос
/ 27 июня 2011

Я использую следующий код для динамического создания элемента управления 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 ... ", как я могу это исправить?Элемент управления должен быть добавлен из предыдущих строк?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Самый простой способ - просто выгрузить элемент управления сокетом в форму, чтобы избавить от необходимости импортировать лицензию и получить строгий ввод, затем;

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

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

Или, возможно, массив сокетов - это то, что вам нужно?

1 голос
/ 08 декабря 2011

Извините за мой плохой английский ...

Вы можете создать массив элементов управления 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

В этой ситуации Index является индексом элемента управления в массиве, поэтому вам не нужно отслеживать элементы управления самостоятельно.

Надеюсь, это поможет ... Веселитесь! :)

0 голосов
/ 27 июня 2011

У вас нет объявленной переменной s1. Вы просто добавили элемент управления в форму с таким именем. Вы можете получить его, используя:

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

Мой VB6 ржавый, поэтому я не уверен, что, будучи Object, вы еще можете много работать с ним.

...