80 lines
1.8 KiB
C++
80 lines
1.8 KiB
C++
// Copyright (C) 2016 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
|
|
|
#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 <QtCore/private/qglobal_p.h>
|
|
#ifdef Q_OS_WIN
|
|
# include <QtCore/qstring.h>
|
|
# include <qt_windows.h>
|
|
|
|
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
|