diff options
Diffstat (limited to 'XMPFiles/source/PluginHandler/ModuleUtils.h')
-rw-r--r-- | XMPFiles/source/PluginHandler/ModuleUtils.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/XMPFiles/source/PluginHandler/ModuleUtils.h b/XMPFiles/source/PluginHandler/ModuleUtils.h new file mode 100644 index 0000000..eedf6bf --- /dev/null +++ b/XMPFiles/source/PluginHandler/ModuleUtils.h @@ -0,0 +1,77 @@ +// ================================================================================================= +// ADOBE SYSTEMS INCORPORATED +// Copyright 2011 Adobe Systems Incorporated +// All Rights Reserved +// +// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms +// of the Adobe license agreement accompanying it. +// ================================================================================================= + +#ifndef MODULEUTILS_H +#define MODULEUTILS_H +#include "XMPFiles/source/XMPFiles_Impl.hpp" + +#if XMP_WinBuild +#include <Windows.h> +typedef HMODULE OS_ModuleRef; +#elif XMP_MacBuild +#include <CoreFoundation/CFBundle.h> +#include <tr1/memory> +typedef CFBundleRef OS_ModuleRef; +#elif XMP_UNIXBuild +#include <tr1/memory> +typedef void* OS_ModuleRef; +#else +#error Unsupported operating system +#endif + +namespace XMP_PLUGIN +{ + +/** + * Platform implementation to retrieve a function pointer of the name \param inSymbol from a module \param inOSModule + */ +void* GetFunctionPointerFromModuleImpl( OS_ModuleRef inOSModule, const char* inSymbol ); + +/** + * @return true if @param inModulePath points to a valid shared library +*/ +#if XMP_MacBuild +bool IsValidLibrary( const std::string & inModulePath ); +#endif + +/** + * Load module specified by absolute path \param inModulePath + * + * Win: + * If \param inOnlyResourceAccess = true, only the image is loaded, no referenced dlls are loaded nor initialization code is executed. + * If the module is already loaded and executable, it behaves as \param inOnlyResourceAccess = false. + * The reference count is increased, so don't forget to call UnloadModule. + * + * Mac: + * If \param inOnlyResourceAccess = true, only the CFBundleRef is created. No code is loaded and executed. + */ +OS_ModuleRef LoadModule( const std::string & inModulePath, bool inOnlyResourceAccess = false ); + +/** + * Unload module + * @param inModule + * @param inOnlyResourceAccess = true, close resource file (only relevant for Linux !!). + */ +void UnloadModule( OS_ModuleRef inModule, bool inOnlyResourceAccess = false ); + +/** @brief Read resource file and fill the data in outBuffer + * @param inOSModule Handle of the module. + * @param inResourceName Name of the resource file which needs to be read. + * @param inResourceType Type/Extension of the resource file. + * @param outBuffer Output buffer where data read from the resource file will be stored. + * @return true on success otherwise false + */ +bool GetResourceDataFromModule( + OS_ModuleRef inOSModule, + const std::string & inResourceName, + const std::string & inResourceType, + std::string & outBuffer); + +} //namespace XMP_PLUGIN +#endif |