C++ DLL导出的两种方式和链接的两种方式
第一种 导出方式
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 ;
}
C++ DLL导出的两种方式和链接的两种方式的更多相关文章
- dll导出函数的两种方式的比较
最初的网页链接已经挂了, 在此贴一个中间的转载链接 https://blog.csdn.net/zhazhiqiang/article/details/51577523 一 概要 vs中导出 dll的 ...
- MFC DLL 导出函数的定义方式
一直在鼓捣DLL,每天的工作都是调试一个一个的DLL,往DLL里面添加自己的代码,但是对于DLL一直不太了解啊!今天一查资料,才发现自己对于DLL编写的一些基本知识也不了解.要学习,这篇文章先总结DL ...
- 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包
前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...
- Android两种为ViewPager+Fragment添加Tab的方式
在Android开发中ViewPager的使用是非常广泛的,而它不仅仅能够实现简单的开始引导页,还可以结合Fragment并添加Tab作为选项卡或为显示大批量页面实现强大的顺畅滑动 下面介绍两种为Vi ...
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- 两种常见的Vlan间通信的方式
目录 一:三层交换机方式 二:单臂路由方式 一:三层交换机方式 如图,PC1和PC2是企业内网的主机,属于不同的部门,故属于不同的VLAN.在交换机上配置vlan 10和vlan 20,并且配上主机的 ...
- dll 导出函数名的那些事
dll 导出函数名的那些事 关键字: VC++ DLL 导出函数 经常使用VC6的Dependency或者是Depends工具查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导 ...
- C# 遍历DLL导出函数
C#如何去遍历一个由C++或E语言编写的本地DLL导出函数呢 不过在这里我建议对PE一无所知的人 你或许应先补补这方面的知识,我不知道为什么PE方面的 应用在C#中怎么这么少,我查阅过相关 C#的知识 ...
- dll的概念 dll导出变量 函数 类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接 ...
随机推荐
- Servlet的入门案例
编写入门案例 1)编写java类,继承HttpServlet类 2)重新doGet和doPost方法 3)Servlet程序交给tomcat服务器运行!! 3.1 servlet程序的class码拷贝 ...
- ajax结合mysql数据库和smarty实现局部数据状态的刷新
效果状态:通过点击锁定状态实现状态锁定与不锁定之间的切换 1.主程序:01.php导入smarty和mysql类,取得数据导入列表模板 <?php include './include/M ...
- android设置gps自动开启
1.第一种方法 private void toggleGPS() { Intent gpsIntent = new Intent(); gpsIntent.setClassName("com ...
- C++ STL Heap算法
#include <iostream>#include <algorithm>#include <vector> using namespace std; int ...
- mysql软件升降级及配置参数
1.下载mysql5.7的软件 https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.g ...
- js的event详解
event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...
- iOS-上传头像的使用
static NSString *const uploadSuccess = @"更改头像成功"; @interface DMAccountInformationViewContr ...
- 服务器watchdog看门狗的理解
1.什么是watchdog?watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器.然而它与我们平常所接触的定时器在作用上又有所不同.普通 ...
- VICA概述及架构设计
VICA全称VAT Invoice Client Platform(增值税发票客户端平台),顾名思义就是公司增值税发票业务相关处理的客户端集成平台.在VICA出现之前,公司发票开具的技术主要是依赖于A ...
- laravel 加载指定版本的mongodb
composer require jenssegers/mongodb:3.3 注意开启 php的mongodb的扩展 pecl install mongodb