Laufzeitfehler in Visual Basic auslösen

Veröffentlicht: 28. Dez 1999 | Aktualisiert: 17. Jun 2004

Von Mathias Schiffer

Wird eine Standard-DLL unter Visual Basic eingesetzt, wird der Erfolg einer Aktion zumeist über den Rückgabewert einer genutzten Funktion ermittelt. Tritt ein Fehler auf, wird kein Laufzeitfehler ausgelöst, sondern ein auf den Fehler hinweisender Rückgabewert muss – mehr oder weniger umständlich – analysiert werden.

Die Auslösung eines abfangbaren Laufzeitfehlers zeigt jedoch deutlich komfortabler Fehler bei der Abarbeitung der Funktionen Ihrer DLL. Hierfür muss eine Funktion den Rückgabetyp HRESULT tragen.

HRESULT ist ein 32-Bit breiter Datentyp, dessen oberstes Bit im Fehlerfall gesetzt wird. Die folgenden 15 Bits geben nähere Informationen zu Art und Herkunft des Fehlers – im Automationsfall weist hier der Wert FACILITY_ITF darauf hin, dass ein Fehler im genutzten Interface ("ITF") auftrat. Die unteren 16 Bits eines HRESULT verbleiben als tatsächliche Statuscode-Rückgabe der Funktion, um den Fehler genauer zu spezifizieren.

Den Datentyp HRESULT unterstützt Visual Basic selber allerdings nicht, so dass eine Deklaration Ihrer exportierten Funktionen unmöglich wird. Abhilfe bietet hier, Ihre DLL mit einer Typenbibliothek ("Type Library") auszustatten. Ihre DLL kann dann über den "Verweise"-Dialog für eine VB-Anwendung referenziert und ohne explizite, auf VB-Datentypen beschränkte Deklaration verwendet werden. Für den VB-Anwender zeigt sich im Objektkatalog als Rückgabewert der Funktion der Datentyp Long, der mit den unteren 16 Bits des HRESULT-Typs gleichzusetzen ist. Die oberen 16 Bits des HRESULT sind für Visual Basic Code selber nicht sichtbar, sondern werden für die Auslösung des Laufzeitfehlers verwendet.

Ein konkretes Beispiel für das Erzeugen eines Automationsfehlers in Visual Basic aus einer Standard-DLL heraus sowie weitere Informationen zur Vorgehensweise finden Sie in der MSDN Library in der Visual Basic Knowledgebase unter dem Titel "HOWTO: Raise an Error in Visual Basic From Your C DLL" (Article ID: Q189134).

Tipp: Verwenden Sie nach Möglichkeit vorhandene Fehlercodes aus Winerror.h. Vergeben Sie neue, eigene Fehlercodes nur, wenn diese spezifisch für Ihre DLL sind. Verwenden Sie für eigene Fehlermeldungen nur Statuscodes oberhalb von 200 (hexadezimal), um Konflikte mit bereits definierten Fehlernummern zu vermeiden.