我有一个非常简单的Qt 5.12.0 / VS2015程序,该程序加载了一个第三方库(来自https://www.tec-microsystems.com/downloads.html的“ DX5100 API / DLL for C ++”中的DX5100_v2.dll),该程序在Win10下运行。
代码如下:
#include <QPushButton>
#include <QStyle>
#include <QDialog>
#include <QApplication>
#include <objbase.h>
int main( int argc, char* argv[] )
{
QApplication app( argc, argv );
HMODULE handle = LoadLibrary( "DX5100_v2.dll" );
QDialog dlg;
dlg.setWindowIcon( qApp->style()->standardIcon( QStyle::SP_MessageBoxInformation ) );
dlg.show();
return app.exec();
}
这会导致报告带有堆栈的“ 0xC0000090:浮点无效操作”崩溃
> Qt5Guid.dll!reciprocal_mul_ps(__m128 a, float mul) Ligne 101 C++
Qt5Guid.dll!convertARGBFromARGB32PM_sse4<0,0>(unsigned int * buffer, const unsigned int * src, int count) Ligne 122 C++
Qt5Guid.dll!storeARGB32FromARGB32PM_sse4(unsigned char * dest, const unsigned int * src, int index, int count, const QVector<unsigned int> * __formal, QDitherInfo * __formal) Ligne 298 C++
Qt5Guid.dll!convert_generic(QImageData * dest, const QImageData * src, QFlags<enum Qt::ImageConversionFlag> flags) Ligne 217 C++
Qt5Guid.dll!QImage::convertToFormat_helper(QImage::Format format, QFlags<enum Qt::ImageConversionFlag> flags) Ligne 2091 C++
Qt5Guid.dll!QImage::convertToFormat(QImage::Format f, QFlags<enum Qt::ImageConversionFlag> flags) Ligne 188 C++
Qt5Guid.dll!qt_imageToWinHBITMAP(const QImage & imageIn, int hbitmapFormat) Ligne 280 C++
Qt5Guid.dll!qt_pixmapToWinHBITMAP(const QPixmap & p, int hbitmapFormat) Ligne 360 C++
Qt5Guid.dll!qt_pixmapToWinHICON(const QPixmap & p) Ligne 469 C++
qwindowsd.dll!createHIcon(const QIcon & icon, int xSize, int ySize) Ligne 2642 C++
qwindowsd.dll!QWindowsWindow::setWindowIcon(const QIcon & icon) Ligne 2652 C++
Qt5Guid.dll!QWindow::setIcon(const QIcon & icon) Ligne 1000 C++
Qt5Widgetsd.dll!QWidgetPrivate::setWindowIcon_sys() Ligne 6209 C++
Qt5Widgetsd.dll!QWidget::create(unsigned __int64 window, bool initializeWindow, bool destroyOldWindow) Ligne 1359 C++
Qt5Widgetsd.dll!QWidget::setVisible(bool visible) Ligne 8274 C++
Qt5Widgetsd.dll!QDialog::setVisible(bool visible) Ligne 739 C++
Qt5Widgetsd.dll!QWidget::show() Ligne 7875 C++
dx5100_load_crash.exe!main(int argc, char * * argv) Ligne 18 C++
dx5100_load_crash.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Ligne 104 C++
还请注意,它不再崩溃:
setWindowIcon
调用....但是没有理由导致此函数导致崩溃,看起来我最终处于不稳定状态并且图标显示导致崩溃了吗?LoadLibrary( "DX5100_v2.dll" )
lib /def:DX5100_v2.def /machine:x64 /out:DX5100_v2.lib
),然后链接至该文件(以便DX5100_v2 .dll是在启动时加载的,甚至在执行主入口点之前也已加载)...不会崩溃。