Как распечатать сообщение из пойманного исключения? - PullRequest
4 голосов
/ 12 марта 2011

У меня очень простой вопрос. Был бы очень признателен, если программист C ++ может руководить мной. Я хочу написать код C # ниже в C ++ DLL. Можете ли вы, пожалуйста, руководство?

C # код для перевода:

void someMethod{
    try
    {
    //performs work, that can throw an exception
    }
    catch(Exception ex)
    {
        Log(ex.Message);//logs the message to a text file
    }
}

//can leave this part, i can implement it in C++
public void Log(string message)
{
//logs message in a file... 
}

Я уже делал нечто подобное в C ++, но не могу получить часть сообщения try {} catch (...).

Ответы [ 5 ]

2 голосов
/ 12 марта 2011

Возможно, вы захотите перехватить все сгенерированные исключения.
Поэтому добавьте catch all (catch (…)) и для этого:

try
{
   // ...
}
catch(const std::exception& ex)
{
   std::cout << ex.what() << std::endl;
}
catch(...)
{
   std::cout << "You have got an exception,"
                "better find out its type and add appropriate handler"
                "like for std::exception above to get the error message!" << std::endl;
}
2 голосов
/ 12 марта 2011
void someMethod{
//performs work
try
{}
catch(std::exception& ex)
{
    //Log(ex.Message);//logs the message to a text file
    cout << ex.what(); 
}
catch(...)
{
    // Catch all uncaught exceptions 
}

Но используйте осторожно исключения . Исключения в C ++

1 голос
/ 12 марта 2011

Причина, по которой вы не можете получить исключение с помощью:

try
{
}
catch (...)
{
}

, заключается в том, что вы не объявляете переменную исключения в блоке catch.Это было бы эквивалентно (в C #):

try
{
}
catch
{
    Log(ex.Message); // ex isn't declared
}

Вы можете получить исключение с помощью следующего кода:

try
{
}
catch (std::exception& ex)
{
}
1 голос
/ 12 марта 2011

Попробуйте:

#include <exception.h>
#include <iostream>
void someMethod() {
    //performs work
    try {

    }
    catch(std::exception ex) {
        std::cout << ex.what() << std::endl;
    }
}
0 голосов
/ 20 февраля 2014

Я предполагаю, что запрошенная функция экспортируется библиотекой DLL, поэтому я предотвращаю любые летающие исключения.

#include <exception.h>

// some function exported by the DLL
void someFunction() 
{
    try {
        // perform the dangerous stuff
    } catch (const std::exception& ex) {
        logException(ex.what());
    } catch (...) {
        // Important don't return an exception to the caller, it may crash
        logException("unexpected exception caught");
    }
}

/// log the exception message
public void logException(const char* const msg)
{
    // write message in a file... 
}
...