try-catch Exception-Meldung ausgeben



  • catch (char *Fehlerstring)
    {
    // Fehler ausgeben
    MessageBox(NULL,TEXT(Fehlerstring),NULL,NULL);
    }

    error C2065: 'LFehlerstring' : undeclared indentifier

    ??? Was ist falsch?



  • Hm, das kann ich dir jetzt leider auch nicht sagen, mit dem VS 2003 funktioniert der Quellcode bei mir jedenfalls.



  • ich hab hier embedded VC++. Es muss aber auch hier ein weg gehen. ist ziemlich an VC++ anglehnt. halt für pocket pcs.



  • Gib doch einfach C2065 in den Such-Index deiner MSDN-Hilfe ein, da wird dir geholfen. 😃



  • Diese UNICODE-Mappings sollte man nur bei String-Literalen verwenden - das ist falsch (in der ASCII-Version dürfte es klappen, in der UNICODE-Version gibt's Probleme). Verwend' lieber ein Konvertierungsmakro ala A2T().



  • also eVC++ brauch immer WideStrings um Nachrichten darstellen zu können (so wie wchar_t, TCHAR)

    ..aber wie muss nun der catch-block aussehen. allein mit wchar_t in klammern kann der compiler auch nix anfangen.



  • Etwa so:

    int main ()
    {
      USES_CONVERSION;
      int Version = 0; 
    
      try
      {
        Version = 5;
        if (Version < 3)
          throw "Format veraltet, kann nicht gelesen werden";
        if (Version > 3)
          throw "Unbekanntes Format";
      }
      catch (char *Fehlerstring)
      {
        // Fehler ausgeben
        MessageBox(NULL,A2T(Fehlerstring),NULL,NULL);
      }
     return 0;
    }
    

    (A2T wandelt char-Strings in TCHAR-Strings um - USES_CONVERSION definiert dafür einige Hilfsvariablen)



  • Oder man benutzt gleich Wide-String Literale.

    int main ()
    {
    	int Version = 0; 
    	try
    	{
    		Version = 5;
    		if (Version < 3)
    			throw L"Format veraltet, kann nicht gelesen werden";
    		if (Version > 3)
    			throw L"Unbekanntes Format";
    	}
    	catch (const wchar_t* Fehlerstring)
    	{
    		// Fehler ausgeben
    		MessageBoxW(NULL, Fehlerstring, NULL, 0);
    	}
    	return 0;
    }
    


  • ok, folgende Compilermeldung kommt in eVC++:

    error LNK2001: unresolved external symbol "const type_info::'vftable'" (??_7type_info@@6B@)
    

    kennt das wer?



  • ok da fehlte die ccrtrtti.lib als library

    aber nun schmiert das programm beim aufruf der exception ab! keine ahnung warum.
    (catch(...) scheint dagegen zu funktionieren)


Anmelden zum Antworten