diff options
Diffstat (limited to 'src/runtimerender/windows/DynamicLibLoader.h')
-rw-r--r-- | src/runtimerender/windows/DynamicLibLoader.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/runtimerender/windows/DynamicLibLoader.h b/src/runtimerender/windows/DynamicLibLoader.h new file mode 100644 index 0000000..09b028b --- /dev/null +++ b/src/runtimerender/windows/DynamicLibLoader.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2012 NVIDIA Corporation. +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt 3D Studio. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#pragma once +#ifndef QT3DS_WINDOWS_DYNAMIC_LIB_LOADER_H +#define QT3DS_WINDOWS_DYNAMIC_LIB_LOADER_H + +#include "foundation/Qt3DSFoundation.h" +#include "foundation/Qt3DSBroadcastingAllocator.h" + +#include <QLibrary> + +namespace qt3ds { +namespace render { + using namespace qt3ds; + // using namespace qt3ds::render; + + class CLoadedDynamicLibrary + { + QLibrary* m_DLLHandle; + CLoadedDynamicLibrary(QLibrary* hdl) + : m_DLLHandle(hdl) + { + } + CLoadedDynamicLibrary(const CLoadedDynamicLibrary &); + CLoadedDynamicLibrary &operator=(const CLoadedDynamicLibrary &); + + public: + ~CLoadedDynamicLibrary() + { + if (m_DLLHandle) { + m_DLLHandle->unload(); + delete m_DLLHandle; + } + m_DLLHandle = 0; + } + void *FindFunction(const char *name) { return (void*)m_DLLHandle->resolve(name); } + static CLoadedDynamicLibrary *Create(const char *inFullDllPath, NVFoundationBase &fnd) + { + QLibrary* hdl = new QLibrary(inFullDllPath); + if (!hdl->load()) { + qCCritical(INVALID_OPERATION, "Failed to load dynamic library %s: %s", + inFullDllPath, qPrintable(hdl->errorString())); + + delete hdl; + return nullptr; + } + return QT3DS_NEW(fnd.getAllocator(), CLoadedDynamicLibrary)(hdl); + } + }; +} +} + +#endif |