라이브러리에서 예외를 throw하면 예외가 호출자에 의해 catch되지 않습니다. 라이브러리 간의 C++ std :: 예외
내가 정적 라이브러리에서이 기능이있는 경우, 설명하기 :#include <exception>
void TestClass::ThrowException()
{
throw new std::exception();
}
을 ... 그리고 실행에서 호출 :
TestClass t;
try
{
t.ThrowException();
}
catch (std::exception e)
{
}
catch (...)
{
}
... 그것은 두 번째 캐치입니다 그 예외를받습니다. 첫 번째가 아니라 제가 기대하지 않은 예외입니다. 나는 인식하지 못하는 예외 유형을 야기하는 라이브러리들 사이에 어떤 마샬링이 있다고 생각합니다.
2 개의 바이너리간에 예외를 전달하여 호출자가 'std :: exception'으로 인식 할 수 있습니까? 이차적 인 질문으로, 이것은 좋은 생각입니까?
Visual Studio에서 작업하면서 Windows를 대상으로합니다.
저는 관리되는 (C#) 배경에서 왔습니다. 그래서 여기에서 무슨 일이 일어나고 있는지, 그리고 C++의 모범 사례는 무엇인지 더 깊이 이해하고 싶습니다. –
'catch (std :: exception e)'대신'catch (std :: exception & e)'를 시도하십시오. – Arkady
두 번째로 살펴보면 포인터가 될'throw new'를 볼 수 있습니다. [C++ 예외 발생 방법] (http://stackoverflow.com/questions/8480640/how-to-throw-a-c-exception)을 참조하십시오. 다른 말로하면 C#에서'new'를 사용하는 곳이 많기 때문에 C++에서도 같은 것을하지 않을 것입니다. – crashmstr