C++ DLL导出的两种方式和链接的两种方式
2024-09-06 03:00:58
第一种 导出方式
extern "C" _declspec(dllexport) int Plus(int x, int y);
extern "C" _declspec(dllexport) int Sub(int x, int y);
extern "C" _declspec(dllexport) int Mul(int x, int y);
extern "C" _declspec(dllexport) int Div(int x, int y); int Plus(int x, int y)
{
return x + y;
} int Sub(int x, int y)
{
return x - y;
} int Mul(int x, int y)
{
return x * y;
} int Div(int x, int y)
{
return x / y;
}
第二种 导出方式
在项目上添加一个def文件
// def文件里面
EXPORTS
Plus @
Sub @
Mul @ NONAME // (此种方式只导出序号)
Div @
// CPP文件里面
int Plus(int x, int y)
{
return x + y;
} int Sub(int x, int y)
{
return x - y;
} int Mul(int x, int y)
{
return x * y;
} int Div(int x, int y)
{
return x / y;
}
DLL使用
第一种 隐式链接
// 先把TestDll.lib 和 TestDll.dll放在main.cpp 同一目录下
#include <stdio.h>
#pragma comment(lib, "TestDll.lib") extern "C" _declspec(dllimport) int Plus(int x, int y);
extern "C" _declspec(dllimport) int Sub(int x, int y);
extern "C" _declspec(dllimport) int Mul(int x, int y);
extern "C" _declspec(dllimport) int Div(int x, int y); int main()
{
int d = Plus(, );
printf("%d", d);
getchar();
return ;
}
第二种 显示链接
#include <stdio.h>
#include <windows.h> int main()
{
// 定义函数指针
typedef int(*lpPlus)(int, int);
typedef int(*lpSub)(int, int);
typedef int(*lpMul)(int, int);
typedef int(*lpDiv)(int, int);
// 获取模块句柄
HMODULE hMoudle = LoadLibrary(L"TestDll.dll");
// 获取函数地址
lpPlus MyPlus = (lpPlus)GetProcAddress(hMoudle, "Plus");
lpSub MySub = (lpSub)GetProcAddress(hMoudle, "Sub");
lpMul MyMul = (lpMul)GetProcAddress(hMoudle, "Mul");
lpDiv Mydiv = (lpDiv)GetProcAddress(hMoudle, "Div");
// 调用
int d = MyPlus(, );
printf("%d", d);
getchar();
return ;
}
最新文章
- chrome调试命令模式
- 转载——Python模拟登录代码
- 可以用google了
- Haskell高阶函数
- 利用rman进行异机还原(目录相同)
- CentOS7与Win7双系统引导问题
- TensorFlow实现与优化深度神经网络
- 最短路(spfa)
- 深度学习梯度反向传播出现Nan值的原因归类
- Python根据路径名称获取文件的名称以及所在的路径
- 安装老版本redis .NET 客户端
- java 字符串截取类 区分中文、英文、数字、标点符号
- php传值,传地址,传引用的区别
- java中集合格式及json格式的特点和转换
- python Tensorflow 实现图像的卷积处理
- Jmeter-常用函数之__CSVRead使用
- intellij idea使用maven本地仓库及修改本地仓库路径
- 安装S_S相关报错的troubleshooting
- Spring Boot 例一 实现jsonp接口
- python函数getopt用法