Date: 2017/9/23
dll的动态加载,又称显式加载,特点有以下几点:
1:灵活,可以在需要的时候用LoadLibrary进行加载,在不需要的时候用FreeLibrary进行卸载,这样可以不必占用内存。
2:可以在没有dll时候发现,而不致程序报错。
3:加载程序中有条件才运行的库。
4:热更新,在不停止程序的前提下进行更新。
5:复杂一些,需要显式获得函数地址。
6:dll没有对应的lib文件,此时只能进行动态加载。
7:dll动态加载只需要dll文件就可以了,不需要导入库和头文件。
加载方法:
LoadLibrary
GetProcAddress
FreeLibrary
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib, "DllLoad.lib")
int main()
{
HINSTANCE h = LoadLibraryA("DllLoad.dll");
typedef int(*FunPtr)(int a, int b);//定义函数指针
if (h == NULL)
{
FreeLibrary(h);
printf("load lib error\n");
}
else
{
FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");