ich hab da so ein Problem mit Exceptions und Dynamic Shared Objects (unter Linux).
Ich hab ein Lib (*.so) und eine Anwendung, die diese benutzt. Die Lib stellt u.a ein Interface bereit, das von der Anwendung implementiert wird und dessen Funktionen dann wiederum in der Library aufgerufen werden. In einer dieser virtuellen Funktionen, die in der Anwendung definiert und in der Lib aufgerufen werden, wird eine Lib-Funktion aufgerufen, die eine Exception wirft. Diese Exception kann ich jetzt irgendwie nur innerhalb der virtuellen Funktion fangen, aber nicht außerhalb in der main Funktion.
ich merke gerade, dass das alles ein bisschen wirr klingt, deshalb mal ein bisschen Code.
Code: Alles auswählen
SomeInterface::func()
{
...
someLibFunc(); // wirft exception
...
}
int main()
{
SomeInterface foo;
Library lib(&foo);
try
{
lib.doSomething(); // ruft SomeInterface::func() auf
}
catch(std::exception const &e)
{
// Exception wird nie gefangen
}
}
Fangen kann ich die Exception nur in SomeInterface::func():
Code: Alles auswählen
SomeInterface::func()
{
try
{
someLibFunc(); // wirft exception
}
catch(std::exception const &e)
{
// das geht
}
}
Kann man dieses Problem irgendwie umgehen, so dass man die Exceptions auch in der main-Funktion fangen kann?
EDIT: Mist, der Fehler scheint doch woanders zu liegen, denn in einem Minimalbeispiel funktioniert alles prima. Jetzt muss ich wohl irgendwie den Unterschiede finden...