Resources - Klasse


CopWorker

Mitglied
Hallo zusammen,

hier komme ich leider nicht weiter.
Es soll möglich sein eine Exception auszugeben und zwar in Form von einer "Win32Exception".

Ich verwende folgende Code Beispiele:
C#:
public class MyException : Win32Exception
  {
    /// <summary>Serialization constructor</summary>
    protected MyException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
    }

    /// <summary>Unspecified rpc error</summary>
    public MyException() : base(Resources.ExceptionStrings.Exception)
    {
    }

    /// <summary>Unspecified rpc error</summary>
    public MyException(Exception innerException) : base(Resources.ExceptionStrings.Exception, innerException.ToString())
    {
    }
}
In der Resourses - Tabelle sind 2 Einträge hinterlegt.

RessourceTable_Entries.JPG

Mir ist bekannt, dass das Schlüsselwort "base" erst den Konstruktor der Basisklasse "Win32Exception" und danach den
Konstruktor der abgeleiteten Klasse "MyException" aufruft.
Der Compiler stellt aber nun fest, dass in der "Resource" die "ExceptionStrings" fehlen.

Folgender Hinweis im Kontextfenster:
ExceptionStrings_missing.jpg

Ich verstehen nicht auf was der Bezeichner "ExceptionStrings" verweist.
Auch verstehe ich nicht was im Konstruktor der Basisklasse vor sich geht.


Für jede Hilfe bin ich euch/dir dankbar.
Grüße von CopWorker
 

Spyke

Premium-User
du hast in der Ressorucendatei die Sachen falsch benannt
In der Spalte Name sind keine Sonderzeichen oder ähnliches erlaubt, der Compiler kompiliert daraus später Eigenschaften für die Ressorucen.cs, das heißt du musst die Ressourcen so bennen das gültige Eigenschaftsnamen generiert werden (oder Sodnerzeichen gehen aber kann sein das irgendwas abgeschnitten wird damit designer.cs erstellt werden kann), auf diese kannst du dann auch zu greifen.

Du kannst dir ja auch mal die zugehörige resources.designer.cs anschauen, da siehst du was aus der Ressourcedatei gemachtwird/wie du drauf zugreifen kannst.


Ist ExceptionStrings eine neue Ressourcedatei?
Dann kannst du diese wie jede andere Klasse auch verwenden, einfach aufrufen.
MeinNamespace.ExceptionStrings.Exception
 

CopWorker

Mitglied
Hallo Spyke,

vielen Dank erstmals für deine Hilfe.
Das mit der neuen Ressourcedate "ExceptionStrings" hört sich nicht falsch an.
Das werde ich noch berücksichtigen.

Des Weiteren frage ich mich was im nachfolgenden Code in nach dem Schlüsselwort
"base" vor sich geht. Letztendlich muss da doch so etwas wie ein "string.Format("", .);
ausgeführt werden. Denn der Funktionsaufruf "MyException(...) hat einen Übergabeparameter
vom Typ "Exception".
Ich vermute, es wird ein String "Exception" aus der Ressourcedatei "ExceptionStrings" geholt.
Der müsste eigentlich eine Platzhalter "{0}" enthalten damit mit "string.Format()" der Texte aus der
Übergabevariablen da rein genuddelt werden kann.

Code:
/// <summary>Unspecified rpc error</summary> 
public MyException(Exception innerException) 
          : base(Resources.ExceptionStrings.Exception, innerException.ToString()) 
{
 }
Grüße von CopWorker
 

Spyke

Premium-User
Wo hast du ExceptionStrings her?
Ich dachte es wäre was von dir?

Die Basisklasse Exception (von der am Ende auch Win32Exception abgeleitet ist) hat eine Eigenschaft InnerException diese Eigenschaft wird wohl einfach nur gesetzt werden.

Anstatt einer Ressource, gibt einfach mal so irgendein String an und im Quick Watch siehste dann (beim debuggen) wie deine Exception so ausschaut.

Was mir nur auffällt, sicher das es eine Win32Exception sein soll?
Dies wird, meines Wissens, eher für native Sachen, Win API's und so, verwendet.
Dort wird in der Regel eher ein Fehlercode geschmiessen denn man dann abfragen kann waser bedeutet.
 

CopWorker

Mitglied
Hi Spyke,

es handelt sich um eine Freie SW von Apache. "CSharpTest.Net.RpcLibrary".
Die habe ich bei meinem Projekt als DLL eingebunden.
Leider funktioniert diese an besagten Stellen nicht, bzw. der
Quellcode dieser DLL lässt sich nicht kompilieren.
Ich habe, damit ich mal weiterkomme, diese Stellen auskommentiert und
im Anweisungsblock dieser Funktion ein Meldung im Ausgabefenster reingemacht.

C#:
/// <summary>Unspecified rpc error</summary>
public RpcException(Exception innerException) //: base(Resources.ExceptionStrings.Exception, innerException.ToString())
{
    string strMsg = string.Format("RpcException: --> Fehler aus Exception: \n{0}", innerException);
    Trace.WriteLine(strMsg);
}
Ich benutzte die Library zum Herstellen eines RPC-Servers und RPC-Clients.
Ich brauche für einen Automationsablauf mehrere eigenständige Programme (Prozesse)
welche untereinander über RPC Informationen austauschen sollen.
Hast du da eine Ahnung von???

Wenn ja, hätte ich da eine paar Fragen, wenn es dir recht ist.

Vielen Dank.
Grüße von CopWorker
 

Spyke

Premium-User
Na hab ich nicht so wirklich gemacht.

Ich hab ein paar Prozesse die ich anstoße bei meinem Hauptprogramm die einfach irgendwas prüfen und mir dann über ihren ExitCode sagen ob alles geklappt hat.

Ein Prozess hab ich eingebettet mit seinem Fenster in mein Hauptprogramm, das es wirkt als gehöre dies mit zum Hauptprozess (Anzeige wie ein Control).
Da teile ich ein zwei Aktionen per SendMessage mit, ansonsten müssen die beiden soviel nicht voneinander wissen (der eingebettete Prozess bekommt beim start schon das nötigste mit)