⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.h

📁 游戏框架
💻 H
字号:
#ifndef GLOBAL_TEMPLATE_HEAD_FILE
#define GLOBAL_TEMPLATE_HEAD_FILE

#pragma once

/////////////////////////////////////////////////////////////////////////////////////////

//错误信息长度
#define LEN_ERROR					256									//信息长度

//组件辅助类模板
template <typename IModeluInterface> class CTempldateHelper
{
	//变量定义
protected:
	LPCTSTR							m_pszFuncName;						//函数名字
	LPCTSTR							m_pszModuleDll;						//组件名字
	HINSTANCE						m_hDllInstance;						//DLL 句柄
	REFGUID							m_GuidInterface;					//接口标识
	const DWORD						m_dwVersion;						//接口版本
	IModeluInterface				* m_pIModeluInterface;				//模块接口
	TCHAR							m_szErrorMsg[LEN_ERROR];			//错误信息

	//函数定义
public:
	//构造函数
	CTempldateHelper(REFGUID GuidInterface, DWORD dwVersion, LPCTSTR pszModuleDll, LPCTSTR pszFuncName)
		: m_GuidInterface(GuidInterface), m_dwVersion(dwVersion)
	{
		m_szErrorMsg[0]=0;
		m_hDllInstance=NULL;
		m_pIModeluInterface=NULL;
		m_pszFuncName=pszFuncName;
		m_pszModuleDll=pszModuleDll;
	}
	//析构函数
	virtual ~CTempldateHelper(void)
	{
		CloseInstance();
	}

	//功能函数
public:
	//创建函数
	bool CreateInstance()
	{
		CloseInstance();
		try
		{
			//加载 DLL
			m_hDllInstance=LoadLibrary(m_pszModuleDll);
			if (m_hDllInstance==NULL) 
			{
				_snprintf(m_szErrorMsg,sizeof(m_szErrorMsg),TEXT("%s 加载失败,错误代码:%ld !"),m_pszModuleDll,GetLastError());
				return false;
			}

			//寻找导出函数
			ModuleCreateFunc * CreateFunc=(ModuleCreateFunc *)GetProcAddress(m_hDllInstance,m_pszFuncName);
			if (CreateFunc==NULL) 
			{
				_snprintf(m_szErrorMsg,sizeof(m_szErrorMsg),TEXT("%s 组件创建函数 %s 不存在,错误代码:%ld !"),m_pszModuleDll,m_pszFuncName,GetLastError());
				return false;
			}

			//创建组件
			m_pIModeluInterface=(IModeluInterface *)CreateFunc(m_GuidInterface,m_dwVersion);
			if (m_pIModeluInterface==NULL) 
			{
				_snprintf(m_szErrorMsg,sizeof(m_szErrorMsg),TEXT("%s 组件创建函数 %s 创建组件失败 !"),m_pszModuleDll,m_pszFuncName);
				return false;
			}
		}
		catch (...)	
		{ 
			_snprintf(m_szErrorMsg,sizeof(m_szErrorMsg),TEXT("%s 组件创建函数 %s 发生了异常错误 !"),m_pszModuleDll,m_pszFuncName);
			return false;
		}

		return true;
	}
	//关闭实例
	bool CloseInstance()
	{
		if (m_pIModeluInterface!=NULL)
		{
			m_pIModeluInterface->Release();
			m_pIModeluInterface=NULL;
		}
		if (m_hDllInstance!=NULL)
		{
			FreeLibrary(m_hDllInstance);
			m_hDllInstance=m_hDllInstance;
		}
		return true;
	}
	//是否有效
	bool IsValid()
	{ 
		if (m_pIModeluInterface==NULL) return false;
		return m_pIModeluInterface->IsValid();
	}
	//获取错误
	LPCTSTR GetErrorMessage() { return m_szErrorMsg; }

	//辅助函数
public:
	//指针重载
	IModeluInterface * operator->() { return GetInterface(); }
	//获取对象实例接口指针
	IModeluInterface * GetInterface() { return m_pIModeluInterface; }
};

/////////////////////////////////////////////////////////////////////////////////////////

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -