链接库-C方式)
1.创建DLL(动态链接库-C方式)
1.创建动态链接库项目,名称为Dll2
2.创建Dll2.h
输入如下代码
#pragma once
#ifdef MY_DLL_EXP
#else
#define MY_DLL_EXP _declspec(dllimport)////当编译时,头文件不参加编译,所以.cpp文件中先定义,后头文件被包含进来,因此外部使用时,为dllexport,而在内部编译时,则为dllimport
#endif
//导出函数Add
extern "C" MY_DLL_EXP double Add(double a, double b);
3.创建Dll2.cpp(如果有则不需要创建)
输入如下代码:
#include "stdafx.h"
#include "Dll2.h"
//注意以上两个头文件的相对顺序不能改变
#define MY_DLL_EXP _declspec(dllexport)
double Add(double a, double b) {
return a + b;
}
4.生成即可。
2.链接DLL(动态链接库-C方式)
1.隐式链接
1.准备
Dll2.dll(解决方案Debug目录下)
Dll2.lib(解决方案Debug目录下)
2.创建测试项目testDll3
3.把Dll2.dll和Dll2.lib放入到testDll3项目目录下
4.创建testDll3.cpp
输入如下代码:
//隐式调用
#include <iostream>
#pragma comment(lib,"Dll2.lib")
using namespace std;
//载入函数,此处起到头文件的作用
extern "C" _declspec(dllimport) double Add(double a, double b);
int main() {
cout << "Add(3,4)=" << Add(3, 4) << endl;
cin.get();
return 0;
}
5.生成并运行
运行结果:
2.显式链接
1.新建测试项目testDll4
2.把Dll2.dll放入新建的项目testDll4目录中
3.新建testDll4.cpp
创建dll过程中使用C编译器来编译函数,这样DLL文件中的函数名和原dll工程中的函数名就一致了。
墙裂推荐此种方式
输入如下代码:
//显示链接DLL-C
#include <Windows.h>//加载头文件
#include <iostream>
using namespace std;
//设置全局变量hInst用于存储dll句柄并加载动态链接库
HINSTANCE hInst = nullptr;
//声明函数指针
typedef double(*Add)(double a,double b);
int main() {
//加载Dll2.dll
hInst = LoadLibrary("Dll2.dll");
if (hInst == nullptr) {
cout << "动态链接库加载失败!!!" << endl;
FreeLibrary(hInst);
cin.get();
return 0;
}
//加载函数
Add add = (Add)GetProcAddress(hInst, "Add");
cout << "Add(3,4)="<<add(3,4)<<endl;
cin.get();
FreeLibrary(hInst);
return 0;
}
4.生成并运行。