Microsoft Patch 958369 MS08-070 сломал мое приложение VB6 (Несоответствие типов - динамически создаваемый элемент управления) - PullRequest
6 голосов
/ 18 декабря 2008

Мы обновили наши машины с помощью патча Microsoft, указанного выше, и теперь у нас возникли проблемы с некоторыми элементами управления winsock. При переходе к новой библиотеке компонентов мы столкнулись с двумя проблемами:

  • Мы создаем элемент управления Winsock динамически, используя Form.Controls.Add (...). С новыми dll это дало нам ошибку времени выполнения 731, заявляющую, что нам нужно было добавить лицензию.

Эта проблема была решена путем добавления строки License.Add (PrgID элемента управления) перед добавлением элемента управления.

Теперь проблема в том, что, когда мы пытаемся установить этот элемент управления для объекта типа mWinsock, мы получаем ошибку времени выполнения. Есть мысли?

Ответы [ 4 ]

2 голосов
/ 19 января 2009

Взгляните на «Описание накопительного пакета обновления для Visual Basic 6.0 с пакетом обновления 6 (SP6). Расширенные файлы времени выполнения».

http://support.microsoft.com/kb/957924/

Это обновление от 30 декабря 2008 года должно удалить и заменить неисправное обновление безопасности 9 декабря. Похоже, что касается 926857 и 957924.

958369 представляется статьей Visual FoxPro KB для того же неисправного обновления (9 декабря). VFP использует много элементов управления VB.

1 голос
/ 18 декабря 2008

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

Со ссылкой VB может не иметь всей информации, необходимой для разрешения методов и свойств элемента управления во время выполнения

0 голосов
/ 02 сентября 2009

Я столкнулся с похожей проблемой при динамическом создании не встроенных элементов управления в VB6. Возможно, Винсок больше не считается внутренним. Попробуйте объявить переменную как VBControlExtender вместо Winsock, следующим образом:

Option Explicit
Dim WithEvents objExt As VBControlExtender

Private Sub LoadControl()
   Licenses.Add "MSWinsockLib.Winsock", "xydsfasfjewfe"
   Set objExt = Controls.Add("MSWinsockLib.Winsock", "myCtl")
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
   ' Program the events of the control using Select Case.
   Select Case Info.Name
     Case "DataArrival"
       ' Do stuff
   End Select
End Sub

См. эту статью MSDN для получения дополнительной информации.

0 голосов
/ 26 декабря 2008

Поскольку сигнатуры интерфейса изменились, вам придется удалить ссылку на компонент из проекта, полностью сохранить и закрыть VB6, отменить регистрацию старого элемента управления, зарегистрировать новую версию из патча, заново открыть свой проект и снова добавить компонент в Если вы сделаете это, вы, скорее всего, потеряете поддержку компьютеров, на которых не установлено исправление (или вам придется установить его как часть вашего установочного пакета)

Конечно, вы всегда можете объявить ссылку «Как объект», если это проще, но ваша производительность немного упадет, и вы потеряете поддержку WithEvents

...