#pragma once

//! @file Mix/Module.h
//! @brief モジュールクラスインクルードファイル

#include "Mix/Noncopyable.h"

namespace Mix{

	//! @class Module
	//! @brief モジィールクラス
	class _MIX_DLL_API Module : public Mix::Noncopyable
	{
	private:
		class Impl;
		Impl* m_pImpl;

	public:
		//! @brief コンストラクタ
		Module( void );
		//! @brief デストラクタ
		~Module( void );

		//! @brief モジュールをロードします
		//! @param[in] moduleName モジュール名
		//! @return 成功した場合は True を返します
		Boolean Load( const wchar_t* moduleName );
		//! @brief モジュールをアンロードします
		void Unload( void );

		//! @brief モジュールのファンクションを登録します
		//! @param[in] functionName ファンクション名
		//! @return 成功した場合は True を返します
		Boolean RegisterFunction( const wchar_t* functionName );
		//! @brief モジュールの登録されているファンクションを取得します
		//! @param[in] functionName ファンクション名
		//! @return 成功した場合は ファンクションのポインタを返します
		void* GetFunction( const wchar_t* functionName );
	};

}
