Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.9
-
None
-
MSYS2 Clang64 (UCRT)
Description
Repro:
#include <QApplication> #include <QFileDialog> #include <QMainWindow> #include <QPushButton> #include <winrt/Windows.Foundation.h> int main(int argc, char *argv[]) { // equivalent to init_apartment(apartment_type::multi_threaded): winrt::init_apartment(); QApplication a(argc, argv); QMainWindow w; w.show(); QFileDialog::getOpenFileName(&w); return a.exec(); }
cmake_minimum_required(VERSION 3.19) project(test-bug-winrt LANGUAGES CXX) find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets) set(CMAKE_CXX_STANDARD 20) qt_standard_project_setup() qt_add_executable(test-bug-winrt WIN32 MACOSX_BUNDLE main.cpp mainwindow.cpp mainwindow.h ) target_link_libraries(test-bug-winrt PRIVATE Qt::Core Qt::Widgets RuntimeObject )
An error is displayed and the app gets entirely stuck:
QWindowsContext: OleInitialize() failed: "COM error 0x80010106: Cannot change thread mode after it is set."
Here is the main thread backtrace:
Thread 1 (Thread 12844.0x552c): #0 0x00007ffe14602654 in ntdll!ZwWaitForMultipleObjects () from C:\WINDOWS\SYSTEM32\ntdll.dll No symbol table info available. #1 0x00007ffe11c3e5f3 in WaitForMultipleObjectsEx () from C:\WINDOWS\System32\KernelBase.dll No symbol table info available. #2 0x00007ffe13ea73a4 in combase!CoUnloadingWOW () from C:\WINDOWS\System32\combase.dll No symbol table info available. #3 0x00007ffe13e9211b in combase!InternalSetOleThunkWowPtr () from C:\WINDOWS\System32\combase.dll No symbol table info available. #4 0x00007ffe13ea2abb in combase!CoInitializeSecurity () from C:\WINDOWS\System32\combase.dll No symbol table info available. #5 0x00007ffe13ea25a3 in combase!CoInitializeSecurity () from C:\WINDOWS\System32\combase.dll No symbol table info available. #6 0x00007ffe13e95f83 in combase!InternalCStdIdentityGetIProxyManager () from C:\WINDOWS\System32\combase.dll No symbol table info available. #7 0x00007ffe12a45a91 in RPCRT4!NdrClientCall3 () from C:\WINDOWS\System32\rpcrt4.dll No symbol table info available. #8 0x00007ffe12a455fd in RPCRT4!NdrClientCall3 () from C:\WINDOWS\System32\rpcrt4.dll No symbol table info available. #9 0x00007ffdfb0ab09e in OneCoreUAPCommonProxyStub!GetProxyDllInfo () from C:\Windows\System32\OneCoreUAPCommonProxyStub.dll No symbol table info available. #10 0x00007ffdbac15ba8 in QWindowsNativeFileDialogBase::doExec(HWND__*) () from D:\msys64\clang64\share\qt6\plugins\platforms\qwindows.dll No symbol table info available. #11 0x00007ffdbac1ddf5 in QWindowsDialogHelperBase<QPlatformFileDialogHelper>::exec() () from D:\msys64\clang64\share\qt6\plugins\platforms\qwindows.dll No symbol table info available. #12 0x00007ffd8d81bd46 in QDialog::exec() () from D:\msys64\clang64\bin\Qt6Widgets.dll No symbol table info available. #13 0x00007ffd8d82dd48 in QFileDialog::getOpenFileUrl(QWidget*, QString const&, QUrl const&, QString const&, QString*, QFlags<QFileDialog::Option>, QList<QString> const&) () from D:\msys64\clang64\bin\Qt6Widgets.dll No symbol table info available. #14 0x00007ffd8d82db08 in QFileDialog::getOpenFileName(QWidget*, QString const&, QString const&, QString const&, QString*, QFlags<QFileDialog::Option>) () from D:\msys64\clang64\bin\Qt6Widgets.dll No symbol table info available. #15 0x00007ff773be1727 in qMain (argc=1, argv=0x56dd50) at D:/dev/test-bug-winrt/main.cpp:14 a = {<QGuiApplication> = {<QCoreApplication> = {<QObject> = {_vptr$QObject = 0x7ffd8da117f0 <vtable for QApplication+16>, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x0}, stringdata = 0x7ffd8cb04480 <vtable for QObject+2624>, data = 0x7ffd8cb04370 <vtable for QObject+2352>, static_metacall = 0x7ffd8c840660 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8cb04500 <vtable for QObject+2752>, extradata = 0x0}}, d_ptr = <incomplete type>}, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x7ffd8c76fe00 <QMetaObject const* QMetaObject::staticMetaObject<QObject::staticMetaObject>()>}, stringdata = 0x7ffd8cafc338 <vtable for QCoreApplication+1440>, data = 0x7ffd8cafc1b0 <vtable for QCoreApplication+1048>, static_metacall = 0x7ffd8c7ee840 <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8cafc4a0 <vtable for QCoreApplication+1800>, extradata = 0x0}}, static self = 0x14fdc8}, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x7ffd8cd900c0 <QMetaObject const* QMetaObject::staticMetaObject<QCoreApplication::staticMetaObject>()>}, stringdata = 0x7ffd8d39a354 <vtable for QGuiApplicationPrivate+4332>, data = 0x7ffd8d39a064 <vtable for QGuiApplicationPrivate+3580>, static_metacall = 0x7ffd8cd8eb00 <QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8d39a6e8 <vtable for QGuiApplicationPrivate+5248>, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x7ffd8d590040 <QMetaObject const* QMetaObject::staticMetaObject<QGuiApplication::staticMetaObject>()>}, stringdata = 0x7ffd8da11e00 <vtable for QApplication+1568>, data = 0x7ffd8da11c78 <vtable for QApplication+1176>, static_metacall = 0x7ffd8d58f2a0 <QApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8da11f98 <vtable for QApplication+1976>, extradata = 0x0}}} w = {<QWidget> = {<QObject> = {_vptr$QObject = 0x7ffd8daae020 <vtable for QMainWindow+16>, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x0}, stringdata = 0x7ffd8cb04480 <vtable for QObject+2624>, data = 0x7ffd8cb04370 <vtable for QObject+2352>, static_metacall = 0x7ffd8c840660 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8cb04500 <vtable for QObject+2752>, extradata = 0x0}}, d_ptr = <incomplete type>}, <QPaintDevice> = {_vptr$QPaintDevice = 0x7ffd8daae1d8 <vtable for QMainWindow+456>, painters = 0}, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x7ffd8d59d6f0 <QMetaObject const* QMetaObject::staticMetaObject<QObject::staticMetaObject>()>}, stringdata = 0x7ffd8da1a350 <vtable for QWidget+5712>, data = 0x7ffd8da19ad0 <vtable for QWidget+3536>, static_metacall = 0x7ffd8d5eee60 <QWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffd8da1ab48 <vtable for QWidget+7752>, extradata = 0x0}}, data = 0x5d86d0}, static staticMetaObject = {d = {superdata = {direct = 0x0, indirect = 0x7ffd8d581ca0 <QMetaObject const* QMetaObject::staticMetaObject<QWidget::staticMetaObject>()>}, stringdata = 0x7ffd8daae588 <vtable for QMainWindow+1400>, data = 0x7ffd8daae34c <vtable for QMainWindow+828>, static_metacall = 0x7ffd8d745830 <QMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x7ffd8daae840 <vtable for QMainWindow+2096>, metaTypes = 0x7ffd8daae860 <vtable for QMainWindow+2128>, extradata = 0x0}}} #16 0x00007ff773be4705 in main (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>) at D:/W/B/src/mingw-w64/mingw-w64-crt/crt/crtexewin.c:66 lpCmdLine = 0x569547 "" nShowCmd = 0 hInstance = <optimized out>
It works if I call winrt::init_apartment(single_threaded). Problem is that some other libraries may set / force / require winrt::init_apartment(apartment_type::multi_threaded);
Attachments
Gerrit Reviews
For Gerrit Dashboard: QTBUG-138093 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
658593,3 | Windows: Add explanation about limitations of OLE | dev | qt/qtdoc | Status: NEW | -1 | 0 |