2010-11-19 9 views
2

Ich habe eine C# DLL aufgerufen von Excel VBA, die ich über eine COM Callable Wrapper/COM Interop ausgesetzt. Ich möchte alle Ausnahmen, die in dem C# -Code auftreten, auf dem VBA-Client übergeben können. Gibt es dafür empfohlene Ansätze? Vielen Dank.Fehlerbehandlung in C#/VBA COM Interop

Antwort

0

Vor Jahren habe ich vage Erinnerungen an die Rückgabe von Fehlerinformationen über COM-Funktionsaufrufe. COM-Funktionen sollten keine Ausnahmen zurückgeben. Die Tatsache, dass in der COM-Funktion ein Fehler aufgetreten ist, wird durch den Rückgabewert signalisiert. S_OK (0) bedeutete Erfolg. negative Zahlen bedeuteten Versagen. Sie könnten verschiedene negative Zahlen verwenden, um grundlegende Fehlertypen zu übergeben. Für spezifischere Fehlerinformationen mussten Sie jedoch die IErrorInfo-Schnittstelle für das COM-Objekt implementieren.

Nachdem dies getan wurde, behandelten Visual Basic 6 und Visual Studio 2000 COM-Fehler in Visual Basic, jedoch ältere Versionen von VBA nicht korrekt.

Wenn jemand in letzter Zeit COM benutzt hat, kann er vielleicht die Details ausfüllen und korrigieren, wo mein Gedächtnis über die Jahre verschwommen ist.

Es fällt mir auf, dass die Implementierung eines neuen COM-Wrapper-Codes, der Ausnahmen in dokumentierte COM-Fehler übersetzt, keine einfache generische Sache wäre und dass eine handcodierte Version gemacht werden könnte, aber wiederum müssten Sie die COM-Programmierung verstehen.

Das Redesign Ihrer .NET-Objekte, sodass Fehlerdetails gemeldet wurden, indem Sie Ihre getlasterror() - Methode in Ihrem Objekt aufrufen, wäre eine sinnvolle Umgehungslösung.

2

Es ist möglich, eigene Ausnahmen zu erstellen, die HRESULT-Fehlercodes an VBA oder andere COM-basierte Anrufer zurückmelden. Hier ist ein Beispiel, das E_FAIL verwendet:

public class ComMessageException : Exception 
{ 
    public ComMessageException(string message) 
     :base(message) 
    { 
     HResult = unchecked((int)0x80004005); 
    } 
} 

Here is an MSDN article, die den Prozess beschreibt.

Dies sollte Ihnen die gleiche VBA-Fehler-Unterstützung, die Sie in VB6 hatten, wird es die Fehlermeldung Ihrer Wahl für den Benutzer zusammen mit dem HRESULT angezeigt, die Sie wählen.

Verwandte Themen