动态链接库(dynamic link lib)加载的模板实现
来源:互联网 发布:淘宝 虚拟服务器 编辑:程序博客网 时间:2024/04/29 18:21
当一个大的应用程序要加载不同动态库,但是这些动态库的入口接口相同或者相似,就需要用模板来管理加载动态库类。例如一个基于2个设备开发的应用程序,至少需要有2层,第一层是设备的驱动程序(用动态库DLL表示),第二层需要在初始化2个设备的时候同时加载这两个库。而这2个动态库入口接口一个参数为设备名,一个参数为设备所对应的对象接口。这个时候动态库入口函数就可以写成 typedef int (*pDll)(const char* pName, DllInterface *&pCallor); DllInterface 为模板类声明。具体实现参考以下代码:
template<class DllInterface>
class CDllLoader
{
private:
typedef int (*pDll)(const char* pName, DllInterface *&pCallor); //动态库入口接口定义
//库资源的释放和接口指针释放
void Release()
{
if (m_interface != NULL)
{
m_interface = NULL;
}
if (hDll != NULL)
{
FreeLibrary(hDll);
hDll = NULL;
}
}
public:
CDllLoader()
{
hDll = NULL;
m_interface = NULL;
}
virtual ~CDllLoader()
{
Release();
}
int load(const char* szDllName,const char* szCreateFunctionName,const char* pClassName = NULL)
{
hDll = LoadLibrary(szDllName);
if (hDll)
{
return 1;
}
pDll *pCreate = (pDll)GetProcAddress(hDll,szCreateFunctionName);
if (pCreate == NULL)
{
Release();
return 2;
}
int nRet = pCreate(pClassName,m_interface);
if (nRet < 0)
{
Release();
return nRet;
}
return 0;
}
DllInterface* operator->()
{
return m_interface;
}
bool operator==(DllInterface* p)
{
return m_interface == p;
}
bool operator!=(DllInterface* p)
{
return m_interface != p;
}
bool operator!()
{
return !m_interface;
}
protected:
HINSTANCE hDll; //库实例对象
DllInterface *m_interface; //接口对象,指向动态库中导出的类对象
};
- 动态链接库(dynamic link lib)加载的模板实现
- windows动态链接库(dynamic-link library, DLL)
- DLL(Dynamic Link Library),动态链接库。
- 关于CC_DLL (dll->dynamic link library 动态链接库)
- 动态链接库(Dynamic Link Library)
- 动态链接库(Dynamic Link Libraries)
- 动态链接库(dynamic link library ,DLL)
- 动态链接库(Dynamic Link Library)学习笔记
- 动态链接库(Dynamic Link Library)学习笔记
- Symbian DLL(Dynamic Link Library 动态链接库)
- DLL(Dynamic Link Libraries)VC动态链接库专题
- 动态链接库(Dynamic Link Library)学习笔记
- (转载)动态链接库(Dynamic Link Library)学习笔记
- 动态链接库(Dynamic Link Library)学习笔记
- DLL(Dynamic Link Libraries)VC动态链接库专题
- Dynamic-Link Library Search Order(动态链接库的搜索顺序 )
- 动态链接(dynamic link)与静态链接(static link)
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
- IPsec VPN简介
- android ndk编译自己的webkit
- poj1504
- Oracle11g学习笔记(一)
- 天气预报抓取的方法和源代码(包括从IP获取)
- 动态链接库(dynamic link lib)加载的模板实现
- 宅男程序员给老婆的计算机课程之1:认清实际
- 为什么不要 "lock(this)" ?
- android 获取IP地址
- Linux/CentOS关闭图形界面(X-window)和启用图形界面命令
- js常用功能检查函数-不断更新
- PHP IDE zend studio
- 获取本机时间、精确延时、计时
- php中include和require的区别