Qt错误处理fortran子程序

Qt error handling for fortran subroutines

本文关键字:子程序 fortran 处理 错误 Qt      更新时间:2023-10-16

我有一个Qt GUI项目,它从c++函数调用fortran子程序。这个fortran子程序从文本文件中读取一些数据。但是每当fortran代码失败时(例如项目列表中的错误整数等),GUI窗口就会自动关闭。如果发生错误,是否有办法防止它关闭?

我试过像这样使用try-catch块

 try
 {
  // fortran function call
  test_();
 }
 catch(...)
 {
  qDebug()<<"Error";
 }

,但它没有工作。但是,使用throw语句抛出异常是可以工作的。

我还尝试子类化QApplication类并重新实现notify()函数:

   bool SafeApp::notify(QObject* obj,QEvent* event)
   {
   try
    {
     return QApplication::notify(obj,event);
    }
   catch(std::exception& e)
    {
     return false;
    }
   }

代码编译和运行良好,但在调用fortran函数后仍然崩溃。

Fortran没有异常,所以你调用的Fortran函数不会抛出任何c++可以捕获的东西。

OTOH,在Fortran中,I/O错误等错误的默认行为是停止程序。GFortran运行时库为此使用libc exit()或abort()函数,具体取决于遇到的错误类型。

您可能能够做的是在Fortran I/O语句中添加IOSTAT=和/或IOMSG=说明符。在这种情况下,错误将导致非零的iostat和IOMSG指向的字符串中的一些消息,而不是停止程序。