Initial release
This commit is contained in:
+92
@@ -0,0 +1,92 @@
|
||||
//------------------------------------------------------------------------
|
||||
// Project : SDK Base
|
||||
// Version : 1.0
|
||||
//
|
||||
// Category : Helpers
|
||||
// Filename : base/source/fdynlib.h
|
||||
// Created by : Steinberg, 1998
|
||||
// Description : Dynamic library loading
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// This file is part of a Steinberg SDK. It is subject to the license terms
|
||||
// in the LICENSE file found in the top-level directory of this distribution
|
||||
// and at www.steinberg.net/sdklicenses.
|
||||
// No part of the SDK, including this file, may be copied, modified, propagated,
|
||||
// or distributed except according to the terms contained in the LICENSE file.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
/** @file base/source/fdynlib.h
|
||||
Platform independent dynamic library loading. */
|
||||
//------------------------------------------------------------------------
|
||||
#pragma once
|
||||
|
||||
#include "pluginterfaces/base/ftypes.h"
|
||||
#include "base/source/fobject.h"
|
||||
|
||||
namespace Steinberg {
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
/** Platform independent dynamic library loader. */
|
||||
//------------------------------------------------------------------------
|
||||
class FDynLibrary : public FObject
|
||||
{
|
||||
public:
|
||||
//------------------------------------------------------------------------
|
||||
/** Constructor.
|
||||
|
||||
Loads the specified dynamic library.
|
||||
|
||||
@param[in] name the path of the library to load.
|
||||
@param[in] addExtension if @c true append the platform dependent default extension to @c name.
|
||||
|
||||
@remarks
|
||||
- If @c name specifies a full path, the FDynLibrary searches only that path for the library.
|
||||
- If @c name specifies a relative path or a name without path,
|
||||
FDynLibrary uses a standard search strategy of the current platform to find the library;
|
||||
- If @c name is @c NULL the library is not loaded.
|
||||
- Use init() to load the library. */
|
||||
FDynLibrary (const tchar* name = nullptr, bool addExtension = true);
|
||||
|
||||
/** Destructor.
|
||||
The destructor unloads the library.*/
|
||||
~FDynLibrary () override;
|
||||
|
||||
/** Loads the library if not already loaded.
|
||||
This function is normally called by FDynLibrary().
|
||||
@remarks If the library is already loaded, this call has no effect. */
|
||||
bool init (const tchar* name, bool addExtension = true);
|
||||
|
||||
/** Returns the address of the procedure @c name */
|
||||
void* getProcAddress (const char* name);
|
||||
|
||||
/** Returns true when the library was successfully loaded. */
|
||||
bool isLoaded () {return isloaded;}
|
||||
|
||||
/** Unloads the library if it is loaded.
|
||||
This function is called by ~FDynLibrary (). */
|
||||
bool unload ();
|
||||
|
||||
/** Returns the platform dependent representation of the library instance. */
|
||||
void* getPlatformInstance () const { return instance; }
|
||||
|
||||
#if SMTG_OS_MACOS
|
||||
/** Returns @c true if the library is a bundle (Mac only). */
|
||||
bool isBundleLib () const { return isBundle; }
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
OBJ_METHODS(FDynLibrary, FObject)
|
||||
protected:
|
||||
bool isloaded;
|
||||
|
||||
void* instance;
|
||||
|
||||
#if SMTG_OS_MACOS
|
||||
void* firstSymbol;
|
||||
bool isBundle;
|
||||
#endif
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
} // namespace Steinberg
|
||||
Reference in New Issue
Block a user