当一个大的应用程序要加载不同动态库,但是这些动态库的入口接口相同或者相似,就需要用模板来管理加载动态库类。例如一个基于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; //接口对象,指向动态库中导出的类对象
};
分享到:
相关推荐
VC++2008制作。 展示动态链接库的制作和使用!! 动态链接库深入浅出!! 定义出口函数和入口函数!!
VC动态链接库(Dynamic_Link_Libraries
Dynamic Link Library,即动态链接库,是Microsoft在Windows操作系统中实现共享函数库概念的一种实现方式,这种库包含了可由多个程序同时使用的代码和数据 它其中windows中 一些作为DLL实现的文件有:ActiveX控件(....
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都被直接包含在最终生成的EXE 文件中了。但是若使用DLL,该DLL 不必被包含在最终EXE 文件中,EXE 文件执行时可以...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”...
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”...
labview调用动态链接库相关说明文档,及调用PMAC动态链接库Pcomm32.DLL的例程(labview called dynamic link library-related documentation, and call PMAC dynamic link library routines Pcomm32.DLL)
动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式...
动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll、.ocx(包含ActiveX控制的库)或者 ...
动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态...
在动态库(dynamic libraries)和静态库(static libraries)使用模板(template)
DLLs ( Dynamic Link Libraries) DLLs ( Dynamic Link Libraries)
新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型。
openssl 1.0.0b 的静态链接库 libeay32.lib ssleay32.lib,用他编译无需dll就可以运行。 网上找不到,自己动手弄的,需要的同学你懂的。 编译参数: /MT /Ox /O2 /Ob2 -O -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -...
将Windows Dynamic Link库移植到Linux简介此存储库包含一个库,该库允许本机Linux程序从Windows DLL加载和调用函数。 作为演示,我已将Windows移植Windows动态链接库移植到Linux简介此存储库包含一个库,该库允许本...