以上三篇"DLL学习"都是隐式加载DLL
那么什么是显式加载DLL呢?
只要一个dll文件,不用.h,也不要用link对.lib链接.
HMODULE LoadLibrary(LPCTSTR lpFileName);返回模块的句柄.
获取此动态链接库中的导出函数的地址.
FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName);
在DllTest工程中显式加载dll,访问其导出的add函数
void CDllTestDlg::OnBtnAdd()
{
HINSTANCE hInst;
hInst=LoadLibrary("DLL1.dll");
typedef int (*ADDPROC)(int a, int b);
ADDPROC Add=(ADDPROC)GetProcAddress(hInst, "?add@@YGHHH@Z");
if(!Add)
{
MessageBox("获取函数地址失败!");
return;
}
CString str;
str.Format("5+3=%d",Add(5,3));
MessageBox(str);
}
动态加载(显式)只在需要的时候加载DLL,隐式链接方式是程序一启动就全部加载支内存中.