方式一:.h + .lib + .dll 方式
.h 和 .lib 编译时需要
.lib 运行时需要
.h头文件包含dll中说明输出的类或符号原型或数据结构。
.lib文件 引入库文件,包含被DLL导出的函数的名称和位置,在应用程序的可执行文件中,存放的不是被调用函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行时再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。
.dll 包含实际的函数和数据,发布时只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。
#include <iostream>
using namespace std;
#include "../004/004.h"
/* extern "C" _declspec(dllimport) int sum(int a,int b)*/
#pragma comment(lib,"../Debug/004.lib")
int main()
{
int result = sum(10,11);
cout<<"result="<<result<<endl<<endl;
return 0;
}
方式二:使用Win32 Api + .dll方式进行
LoadLibrary();
GetProcAddress();
FreeLibrary();
HMODULE WINAPI LoadLibrary(_In_LPCWSTR_IpLibFileName);
参数:
IpLibFileName:动态链接库的名称
返回值:
成功则返回库模块的句柄,失败则返回0。
FARPROC WINAPI GetProcAdress(HMODULE hModule, LPCSTR IpProcName);
参数:
hModule :DLL模块句柄
IpProcName:函数名或者序号值。
返回值:
成功者返回 DLL中输出的函数地址。失败返回NULL。
int main()
{
//方式2:使用Win32API+.DLL
//1、加载DLL
HMODULE h=LoadLibrary("004.dll");
//2、构造函数指针
typedef int (*PSUM) (int,int);//
//3、利用函数指针调用函数
/*PSUM psum =(PSUM)GetProcAddress(h,"sum");*///利用函数名
PSUM psum =(PSUM)GetProcAddress(h,(char*)1);//利用函数序号
cout<<psum(11,22)<<endl<<endl;
//4、释放DLL
FreeLibrary(h);
return 0;
}