Qt错误处理fortran子程序
Qt error handling for fortran subroutines
我有一个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指向的字符串中的一些消息,而不是停止程序。
相关文章:
- 使用 VS2015 在 Windows 10 上构建 Fortran .lib x64 位并将其链接到 C++
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- Fortran 和 C++ 的混合编程:Fortran 不能调用C++子程序
- 在一个子程序中输入的变量用于C++中的另一个子程序
- 如何在C++中获取真实值精度 与Fortran相同(Pararel Studio XE编译器)
- 读取 C++ 中的 Fortran 数据类型
- 重新编译我们的FORTRAN代码并在C++中使用后,我们的system()或C_str()命令无法正常工作
- 这个x86汇编代码是如何接收和存储子程序返回的数据的
- 使用C++和fortran构建R包,Mac
- 如何将C++17 stdc++fs库链接到混合语言(C++和Fortran)CMake项目
- 混合编程 - 包括C++标头到 Fortran
- 从C++调用的Fortran子程序的值错误
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- C++从dll调用FORTRAN子程序
- 使用Fortran 77子程序作为独立程序,从C++调用
- Qt错误处理fortran子程序
- 从c++调用带有可选参数的Fortran子程序
- 从c++调用Fortran子程序,链接时引用未定义
- 从Fortran调用的c++子程序:如何处理动态内存分配