DLL调用方式可以分为两类:
隐式调用(需要.lib 和.dll)
显式调用(需要.dll)
隐式调用
隐式加载就是在程序编译的时候就将dll编译到可执行文件中。这种加载方式调用方便,程序发布的时候可以不用讲dll带着.缺点是,这样编译出来后,程序会很大。
新建一个工程,将所需的.dll .lib .h放到工程目录下
//隐式加载dll
#pragma comment(lib, "dllDemo.lib")
或者在项目->属性->链接器->输入中添加附加依赖项 dllDemo.lib。
编译运行,该DLL会直接执行其中的可执行代码
显式调用
DLL显式加载时指在程序运行过程中,需要用到dll里的函数时,再动态加载dll到内存中,这种加载方式因为是在程序运行后再加载的,所以可以让程序启动更快,而且dll的维护更容易,使得程序如果需要更新,很多时候直接更新dll,而不用重新安装程序.只是这种加载方式,函数调用稍微复杂一点。
需要注意的时这种方式下调用相比较为复杂。比如之前文章中的调用带界面的DLL时,
//1.加载动态库
HINSTANCE m_hDll = LoadLibrary(_T("MFCDLL1.dll"));
//2.根据函数名获取函数地址
typedef IHpDllWin* (*hpDllFun)();
hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll, "ShowDialog");
//3.获取导出类对象指针,调用导出函数
IHpDllWin* m_hpwin = pShowDlg();
//4.卸载dll
FreeLibrary(hDll);