一、背景和目标说明
背景:工作中,经常需要加载特定的dll完成特定的功能,为了避免重复代码,因此自行封装了一个简单的加载dll的类。
目标:该类能实现加载同一套导出接口的dll
二、术语和参考资料
暂无
三、 设计
1、整体思路
首先需要约定这一套dll的导出接口是分别是CreateObject、ReleaseObject
支持加载不同的dll,因此需要外部传入dll的全路径
获取导出接口
2、设计方案
2.1 类接口
#pragma once
//定义导出接口
typedef int (__stdcall * FunCreateObject)(void**, int);
typedef int (__stdcall * FunRelaseObject)(void*, int);
//加载dll的公共类
class CLoadDllClass
{
public:
CLoadDllClass();
~CLoadDllClass();
protected:
virtual CString _GetDllFilePath(); //子类需实现
BOOL _Init();
BOOL _ReleaseData(void* pData, int nID);
BOOL _LoadLibrary(const CString& strFilePath);
BOOL _GetFuncAddr(void);
BOOL _GetObject(void** pData, int nID);
private:
FunCreateObject m_pFunCreateObject;
FunRelaseObject m_pFunRelaseObject;
HMODULE m_hDll;
};
由类接口可知,使用方仅需要实现_GetDllFilePath接口即可,其他的接口内部实现,这样就能减少代码的重复率,在需要加载同一套dll的类中,仅需要继承该CLoadDllClass类并实现_GetDllFilePath即可。
2.2 接口说明
1、_GetDllFilePath
调用方需要实现,主要是返回需要加载的dll的全路径
2、_Init
调用方调用,加载dll并获取约定好的导出接口指针
3、_ReleaseData
调用方调用,释放对应的导出指针
4、_GetObject
调用方调用,获取对应的导出指针
示例:https://download.csdn.net/download/m0_48073095/18139854