2008-12-18 3 views
6

Uaktualniliśmy nasze maszyny z wymienioną wyżej łatą microsoft i mamy teraz problemy z niektórymi kontrolkami winsock. Przechodząc do nowej biblioteki komponentów, napotkaliśmy dwa problemy:Poprawka Microsoft 958369 MS08-070 zepsuł moją aplikację VB6 (niedopasowanie typu - dynamicznie utworzona kontrola)

  • Tworzymy kontrolkę Winsock dynamicznie za pomocą Form.Controls.Add (...). Z nowymi bibliotekami dll dał nam 731 błąd czasu wykonywania, stwierdzając, że musimy dodać licencję.

Ten problem rozwiązano, dodając linię License.Add (PrgID kontrolki) przed dodaniem formantu.

Problem polega na tym, że próbujemy ustawić tę kontrolkę na obiekt typu mWinsock, w wyniku czego pojawia się błąd runtime Type Mismatch. jakieś pomysły?

Odpowiedz

1

Konieczne może być dodanie kontrolki do zestawu narzędzi, aby projekt i formularz VB6 miały do ​​niej odpowiednie odniesienie. Będziesz musiał to zrobić, nawet jeśli nie masz go w formularzu w czasie projektowania.

Z VB odniesienia nie mogą mieć wszystkie informacje potrzebne do rozwiązywania metod i właściwości kontroli w czasie wykonywania

0

Ponieważ podpisy interfejsu uległy zmianie, trzeba będzie usunąć odwołanie komponentów z projektu , całkowicie zapisz i zamknij VB6, wyrejestruj stare sterowanie, zarejestruj nową wersję z łatki, ponownie otwórz projekt i dodaj komponent z powrotem. Jeśli to zrobisz, najprawdopodobniej stracisz wsparcie dla maszyn, które nie mają łatki zainstalowany (lub będziesz musiał zainstalować go jako część twojego pakietu instalacyjnego)

Oczywiście, zawsze możesz zadeklarować odniesienie "Jako obiekt", jeśli jest to łatwiejsze, ale twój perfo rmance nieco spadnie, a utracisz obsługę WithEvents

+0

Jakie biblioteki elementów zmieniły interfejs? Przetestowałem kilka z nich, rozpakowując MSI do folderu, a następnie ręcznie kopiując nowe biblioteki nad oryginalnymi w pakietach Reg-Free COM bez zmiany informacji o interfejsie w manifeście EXE. Do tej pory wszystkie prace bez żadnych zmian. – Bob

+0

Zgodnie z OP, interfejs Winsock OCX został zmieniony. Nie jestem pewien, jak to się zmieniło, ale można się było tego dowiedzieć, wyodrębniając bibliotekę typów z obu wersji i porównując je. – rpetrich

2

Zobacz "Opis zbiorczego pakietu zbiorczego aktualizacji dla rozszerzonych plików Runtime dla programu Visual Basic 6.0 z dodatkiem Service Pack 6".

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

to 30 grudnia 2008 aktualizacja powinna usunąć i wymienić wadliwy gru 9 aktualizacji zabezpieczeń. Wydaje się, że dotyczy on zarówno 926857, jak i 957924.

958369 wydaje się być artykułem Visual FoxPro KB dla tej samej błędnej aktualizacji (9 grudnia). VFP używa wielu kontrolek VB.

0

Napotkano podobny problem podczas dynamicznego tworzenia nieistotnych elementów sterujących w VB6. Być może Winsock nie jest już uważany za wewnętrzny. Spróbuj deklarując zmienną jako VBControlExtender zamiast Winsock, co następuje:

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 

Zobacz this MSDN article aby uzyskać więcej informacji.

Powiązane problemy