/**************************************************************************** ** ** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ******************************************************************************/ #ifndef QSYSTEMLIBRARY_P_H #define QSYSTEMLIBRARY_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #ifdef Q_OS_WIN # include # include QT_BEGIN_NAMESPACE class QSystemLibrary { public: explicit QSystemLibrary(const QString &libraryName) { m_libraryName = libraryName; m_handle = 0; m_didLoad = false; } explicit QSystemLibrary(const wchar_t *libraryName) { m_libraryName = QString::fromWCharArray(libraryName); m_handle = 0; m_didLoad = false; } bool load(bool onlySystemDirectory = true) { m_handle = load((const wchar_t *)m_libraryName.utf16(), onlySystemDirectory); m_didLoad = true; return (m_handle != 0); } bool isLoaded() { return (m_handle != 0); } QFunctionPointer resolve(const char *symbol) { if (!m_didLoad) load(); if (!m_handle) return 0; return QFunctionPointer(GetProcAddress(m_handle, symbol)); } static QFunctionPointer resolve(const QString &libraryName, const char *symbol) { return QSystemLibrary(libraryName).resolve(symbol); } static Q_CORE_EXPORT HINSTANCE load(const wchar_t *lpFileName, bool onlySystemDirectory = true); private: HINSTANCE m_handle; QString m_libraryName; bool m_didLoad; }; QT_END_NAMESPACE #endif // Q_OS_WIN #endif // QSYSTEMLIBRARY_P_H