C++调用DLL的两种方法

C++调用DLL的两种方法

DLL代码段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Math.h
extern "C" _declspec(dllexport) int Max(int a,int b);
extern "C" _declspec(dllexport) int Sum(int a,int b);
//Math.cpp
#include "Math.h"
int Max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int Sum(int a,int b)
{
return a+b;
}

静态调用

  1. 把生成的DLL文件、DLL函数声明的头文件、DLL相关的LIB文件拷贝到工程目录
  2. 添加LIB文件:菜单栏 - 工程 - 设定 - 连接 输入LIB文件名
  3. 现有工程包含DLL头文件
  4. 成功,可以开始使用DLL中的函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//静态调用
#include <iostream>
#include <windows.h>
#include "Math.h" //DLL的头文件
using namespace std;
int main()
{
int a=1,b=3;
cout<<Sum(a,b)<<endl;
return 0;
}

动态调用

  1. 把生成的DLL文件拷贝到当前工程目录
  2. 定义函数指针,类型必须与DLL中函数类型一致
  3. 加载DLL
  4. 获取DLL中相应函数的指针
  5. 使用函数
  6. 释放DLL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//动态调用如下
#include <iostream>
#include <windows.h>
using namespace std;
typedef int (*pMax)(int a,int b);//定义DLL中函数的函数指针类型
int main()
{
HINSTANCE dll;
pMax Max; //定义该函数类型的指针
dll = LoadLibrary("Math.dll");//加载动态链接库
Max =(pMax) GetProcAddress(dll,"Max");//获取DLL中Max函数的地址
cout<<Max(5,3)<<endl;//使用函数
FreeLibrary(dll);//释放DLL
return 0;
}