加载动态库的方法

库分两种,静态库和动态库,而动态库的加载方法又分两种,动态加载和静态加载

做为外部库,这两种库的加载都不需要包含头文件,因为相关的信息已经在导入库了

假设导入函数如下:add(int x, int y);

 

头文件如下:

extern "C" int __declspec(dllexport)add(int x, int y);

extern "C"代表c风格的,同时如果用不同的语言,则必需用相同的导入或者导出

源文件如下:

 

#include "test.h"

int add(int x, int y)
{
   return x + y;
}

 

动态加载使用如下:

typedef int(*lpAddFun)(int, int);

 HINSTANCE hDll; //DLL句柄

 pAddFun addFun; //函数指针

hDll = LoadLibrary(TEXT("D:\\work\\dll\\dll\\Debug\\test.dll"));


addFun = (lpAddFun)GetProcAddress(hDll, "add");

 

int result = addFun(2, 3);//得到函数指针后使用

先用windows函数LoadLibrary()得到dll的句柄,然后再根据句柄得到函数指针

如果是动态加载,则在运行的时候才能加载上

 

静态加载使用方式如下:

 

#pragma comment(lib,"D:\\work\\dll\\dll\\Debug\\test.lib");

//.lib文件中仅仅是关于其对应DLL文件中函数的重定位信息

extern "C"  int __declspec(dllimport)add(int x,int y);

int result = add(3, 6);

 

由此可见,动态加载使用比较方便,同时在运行的时刻加载,得到函数指针后直接使用.

而静态加载程序一开始运行就加载,使用的时候如同程序内的函数一样,不需要LoadLibrary()即可

 

 

你可能感兴趣的:(动态库)