Freigeben über


Problembehandlung bei von Visual Basic 6.0 aktualisierten Anwendungen

Aktualisiert: November 2007

Obwohl bei der Entwicklung der Aktualisierungstools von Visual Basic 2008 sorgfältig darauf geachtet wurde, dass alle Probleme in aktualisierten Anwendungen erkannt und gemeldet werden, gibt es doch einige Probleme, die unter keinen Umständen erkannt werden können. Auf dieser Seite werden einige bekannte Probleme aufgeführt, die von den Aktualisierungstools nicht erkannt werden. Außerdem wird beschrieben, wie sie behoben werden können.

Wenn Sie mit einer Anwendung arbeiten, die mit einer früheren Version von Visual Studio aktualisiert wurde, verursachen die vom Aktualisierungstool eingefügten Hilfelinks möglicherweise den Fehler "Seite nicht gefunden". Dieser tritt auf, da die Links auf die Help-Auflistung der älteren Version verweisen und das Format der Hilfelinks geändert wurde.

Zur Behebung dieses Problems können Sie die Fehlerzeichenfolge kopieren und das Thema mithilfe der Suchfunktion in der Hilfe suchen. Beachten Sie, dass einige Fehlerzeichenfolgen Variablen enthalten, sodass Sie möglicherweise nach einem Teil der Zeichenfolge suchen müssen.

Verhaltensunterschiede bei Zeichenfolgen fester Länge in benutzerdefinierten Typen

In Visual Basic 6.0 werden Zeichenfolgen automatisch abgeschnitten, wenn sie in einem benutzerdefinierten Typ einer Zeichenfolge fester Länge zugeordnet werden und sie die feste Länge überschreiten. Nach dem Update auf Visual Basic 2008 werden Zeichenfolgen nicht mehr abgeschnitten, was möglicherweise zu falschen Ergebnissen führen kann.

Hinweis:

Beim Update wird Zeichenfolgen fester Länge in benutzerdefinierten Typen das VBFixedString-Attribut hinzugefügt. Dieses Attribut lässt zu, dass sie von den Dateifunktionen in der Visual Basic-Kompatibilitätsbibliothek als Zeichenfolgen fester Länge behandelt werden.

Um dieses Problem zu beheben, suchen Sie Code, der einer Zeichenfolge fester Länge eine Zeichenfolge zuordnet, und fügen Sie Code hinzu, mit dem die Länge der Zeichenfolge überprüft und sie ggf. abgeschnitten wird:

' Before
MyString = "1234567"
MyStruct.FixedString5 = MyString

' After
MyString = "1234567"
If Len(MyString) > 5 Then
  MyString = Microsoft.VisualBasic.Left(MyString, 5)
End If
MyStruct.FixedString5 = MyString

Beim Schließen eines Formulars wird "Dispose" aufgerufen

In Visual Basic 6.0 können Sie ein Formular entladen und später durch Aufrufen der Show-Methode erneut laden. In Visual Basic 2008 ruft die Close-Methode für ein Formular die Dispose-Methode auf, damit dieses automatisch von der Garbage Collection freigegeben wird. Dies kann zu leichten Abweichungen im Verhalten führen, die nur schwer zu erkennen sind.

  • Wenn Sie in Visual Basic 2008 die Show-Methode für ein entladenes Formular aufrufen, rufen Sie eine neue Instanz des Formulars ab. Alle Eigenschafteneinstellungen aus der Basisklasse gehen dabei verloren.

  • Für modal angezeigte Formulare wird Dispose nicht automatisch aufgerufen. In einigen Fällen empfiehlt sich der Aufruf von Dispose, um Ressourcen zu bereinigen.

Spät gebundene Aufrufe von COM-Objekten können zu Typenkonfliktfehlern führen

Wenn in Visual Basic 6.0 ein spät gebundenes COM-Objekt als Parameter an einen spät gebundenen Aufruf übergeben wird, wird das Objekt in einen Variant vom Typ Nothing umgewandelt. Nach dem Update auf Visual Basic 2008 werden COM-Objekte, deren Typ als Object deklariert wurde, auf die gleiche Weise wie Objekte vom Typ Variants behandelt, die bei der Aktualisierung immer in den Typ Object konvertiert werden. Diese Objekte werden in den Variantentyp Empty gemarshallt. Dies verursacht einen Typenkonfliktfehler in Visual Basic 2008.

Stellen Sie sicher, dass alle Objekte früh gebunden sind, um dieses Problem zu vermeiden.

Von "Err.Number" werden möglicherweise andere Werte zurückgegeben

In einigen Fällen unterscheiden sich die von Visual Basic 2008 zurückgegebenen Fehler von denen, die von Visual Basic 6.0 zurückgegeben werden. Bei Fehlerbehandlungscode, der sich auf die von Err.Number zurückgegebenen Werte stützte, kann dies zu einem anderen Verhalten in der Anwendung führen.

Im Folgenden wird ein Codebeispiel dafür angegeben:

' Visual Basic 6.0
On Local Error GoTo Result
Dim x() As Boolean
Dim y As Variant

y = x(10)

Result:
If Err.Number = 9 Then
   ' Do something.
Else
   ' Do something else.
End If

Vor der Aktualisierung gibt Err.Number immer 9 (Index außerhalb des gültigen Bereichs) zurück und führt den ersten Teil der If-Anweisung aus. Nach der Aktualisierung wird 91 (Objektvariable oder With-Blockvariable wurde nicht festgelegt) zurückgegeben, und die Else-Klausel wird ausgeführt. Dies liegt daran, dass in Visual Basic 2008 ein Array initialisiert werden muss, bevor darauf verwiesen werden kann. In Visual Basic 6.0 hingegen wurden Arrays beim Deklarieren initialisiert.

Wenn der Code auf die Rückgabewerte von Err.Number aufbaut, müssen Sie die Ergebnisse eingehend testen und ggf. den Code ändern.

Siehe auch

Konzepte

Kombinierter Einsatz von Visual Basic 6.0 und der aktuellen Version von Visual Basic

Weitere Ressourcen

Aktualisieren von Anwendungen, die in früheren Versionen von Visual Basic erstellt wurden