diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index e676500e8aa..eee4918737e 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -132,6 +132,7 @@ public: std::unique_ptr origArgv; bool consoleAllocated = false; + static void *mainInstanceHandle; // HINSTANCE without #endif void appendApplicationPathToLibraryPaths(void); diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp index 9d146afa713..9011e3fe9e6 100644 --- a/src/corelib/kernel/qcoreapplication_win.cpp +++ b/src/corelib/kernel/qcoreapplication_win.cpp @@ -20,6 +20,9 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; +// By default, we get the path to the host .exe. ActiveQt can override this +// with the component's DLL. +Q_CONSTINIT void *QCoreApplicationPrivate::mainInstanceHandle = nullptr; QString qAppFileName() // get application file name { /* @@ -45,7 +48,8 @@ QString qAppFileName() // get application file name do { size += MAX_PATH; space.resize(int(size)); - v = GetModuleFileName(NULL, space.data(), DWORD(space.size())); + auto hInstance = reinterpret_cast(QCoreApplicationPrivate::mainInstanceHandle); + v = GetModuleFileName(hInstance, space.data(), DWORD(space.size())); } while (Q_UNLIKELY(v >= size)); return QString::fromWCharArray(space.data(), v);