Локализация динамического winsock

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Локализация динамического winsock

Сообщение awl100Alex » 10.11.2009 (Вт) 12:11

В своей программе использую динамическое создание Winsock следующим кодом...
Код: Выделить всё
'References --> подключить system32\MSWINSCK.OCX (Microsoft Winsock Control 6.0 (SP6)
Private WithEvents Winsock As MSWinsockLib.Winsock

Private Sub Form_Load()
Set Winsock = New MSWinsockLib.Winsock
End Sub

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

Все работает прекрасно, но заметил такую странность: динамически контрол создается только на тех машинах, где установлен непосредственно VB редактор, а на всех остальных... метод New генерит ошибку Run-Time ‘429’ о том, что ActiveX component can’t create object. :(
Проверял местонахождение MSWINSCK.OCX и его повторную регистрацию через RegSvr32 результатов не дали. :(
Тем не менее алгоритм с импортированным Winsock на форму стандартным образом работает на всех машинах без ошибок.

Здесь нашел две подобные темы...
http://bbs.vbstreets.ru/viewtopic.php?f=1&t=22326
http://bbs.vbstreets.ru/viewtopic.php?f=1&t=13298
но коды типа...
Код: Выделить всё
Private WithEvents Winsock2 As Winsock
Private Sub Form_Load()
Set Winsock2 = Form1.Controls.Add("MSWinsockLib.Winsock", "Winsock2")
End Sub

...также не работают. :( Controls.Add генерит Run-Time ‘711’, вроде как строковое определение класса MSWinsockLib.Winsock неправильное. А определение типа MSWinsock.Winsock требует лицензию. Да и не то это все.

Подскажите, пожалуйста, в чем может быть ошибка относительно метода New?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Локализация динамического winsock

Сообщение alibek » 10.11.2009 (Вт) 12:50

Читай про Licenses.Add.
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Локализация динамического winsock

Сообщение Денис » 10.11.2009 (Вт) 12:56

Тут может быть одно решение: у компонента есть зависимости, библиотеки или другие компоненты, которые нужно тянуть и регистрировать вместе с ним.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Локализация динамического winsock

Сообщение Antonariy » 10.11.2009 (Вт) 14:08

Лицензии не понадобятся, если распространять программу с помощью нормального сетапа. Или можно юзать массив винсоков. Или воспользоваться файлом из третьего поста снизу.

Денис, хватит генерировать ерунду. У винсока нет зависимостей.
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Локализация динамического winsock

Сообщение Денис » 10.11.2009 (Вт) 16:59

Antonariy писал(а):У винсока нет зависимостей.

Поправка: среди зависимостей нет не системных библиотек. Вообще-то я сомневаюсь насчет WS2_32.dll, она же системная? (В смысле идет в составе винды, да?)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Локализация динамического winsock

Сообщение awl100Alex » 10.11.2009 (Вт) 17:15

Antonariy писал(а):Или воспользоваться файлом из третьего поста снизу.

Если ты имеешь ввиду файл c:\windows\system32\cmll11v.dll, то я нигде его не нашел. Ни на своей (где все работает), ни на одной из других машин. Что это за такая загадочная библиотека? Скорее всего, не в ней суть. Здесь что-то другое.

Про Licenses.Add я знаю, но не знаю, где найти сведения о номере лицензии на winsock. Да вроде это и не нужно, разве что для каких-то особых случаев.

Насчет WS2_32.dll так она везде есть, как и mswinsck.ocx и все равно не работает. :(

Может версии расходятся?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Локализация динамического winsock

Сообщение Antonariy » 10.11.2009 (Вт) 17:26

Комментарий от Капитана Очевидность к поправке: нет зависимостей от ActiveX-библиотек, любых. При отсутствии native dll текст ошибки был бы другим.

Денис, пробуй думать о том, что прочитал, и перед тем, как писать. За сегодня от тебя не было ни одного разумного сообщения.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Локализация динамического winsock

Сообщение Antonariy » 10.11.2009 (Вт) 17:32

awl100Alex писал(а):Если ты имеешь ввиду файл c:\windows\system32\cmll11v.dll, то я нигде его не нашел.
Нет, третий пост СНИЗУ, а не сверху, там прикреплен архив.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Локализация динамического winsock

Сообщение alibek » 10.11.2009 (Вт) 17:37

awl100Alex писал(а):Да вроде это и не нужно, разве что для каких-то особых случаев.

Когда ты добавляешь компоненты через Controls.Add, это тот самый особый случай.
Lasciate ogni speranza, voi ch'entrate.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Локализация динамического winsock

Сообщение awl100Alex » 10.11.2009 (Вт) 22:33

Antonariy, alibek
Вы оказались абсолютно правы! Разобрался, все получилось! Спасибо за подсказку. :)

В Инете еще нашел форум с подобной проблемой...
http://web2.minasi.com/forum/topic.asp?TOPIC_ID=16026
Некий RajulM помог понять суть вещей:
«...This is because some of the MS Active X controls need a developer license, otherwise the CREATEOBJECT() doesn't work. mswinsck.ocx is only licenced with VB5&6 or MS Visual Studio installs...».

Вобщем, поскольку испытуемого компа (без лицензии на winsock) на данный момент под руками не оказалось, решил пойти обратным путем: нашел в реестре ключ регистрации Winsock Control 6.0 license key, как указал Antonariy...

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlrk"


...и просто удалил его, имитируя отсутствие лицензии. Запустил код, и тут же получил
«Run-Time ‘429’ ActiveX component can’t create object» метода New. Вообщем-то, что и требовалось доказать.

Спасибо всем! Топик можно считать закрытым. :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList