在VS2015中创建C++动态链接dll,和两种调用动态链接dll的两种方式

2024-09-02 15:38

本文主要是介绍在VS2015中创建C++动态链接dll,和两种调用动态链接dll的两种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、创建动态链接库DLL项目

1 文件->项目->Visual C++->Win32->Win32 控制台应用程序

创建名为MyDll的项目,如下图所:

2 在应用程序设置中设置应用程序类型为DLL,如下图所示:

3.在头文件中添加MyDll.h文件

代码:

#pragma once
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport) 
#else
#define MATHFUNCSDLL_API __declspec(dllimport) 
#endifnamespace DLL {class Myth {public:static MATHFUNCSDLL_API double add(double a, double b);};
}

4.在MyDll.cpp文件中给函数定义:

代码:

#include "stdafx.h"
#include<iostream>
#include "MyDll.h"namespace DLL {double Myth::add(double a, double b) {return a + b;}
}

5.点击生成->生成解决方案,会生成MyDll.dll和MyDll.lib文件

 二、调用动态库DLL

2.1 在DLL工程中新建解决方案

1)在DLL所在的工程 文件->新建->项目->Visual C++->Win32 控制台应用程序

2)在解决方案处点击添加到解决方案

3)将新建的解决方案设置为启动项目

4)右键项目(我的是test1)下的引用->添加引用->将MyDll 打勾

5)项目(我的是test1)->属性

6)点击c/c++,将MyDll.h所在的目录路径添加到附加包含目录

7)测试程序,将添加头文件MyDll.h

#include "stdafx.h"
#include<iostream>
#include"MyDll.h"int main()
{std::cout << DLL::Myth::add(1, 2) << std::endl;system("pause");return 0;
}

8)执行程序

2.2 类似于调用第三方库那样调用dll文件

1)为了方便现将刚才创建的MyDll.dll,MyDll.lib,MyDll.h文件放到一个文件中,放在lib1中,MyDll.dll在debug中,debug和release的dll和lib不能混用,一定要注意区分,MyDll.lib存放在lib中,MyDll.h存放在include中

2)新建win32控制应用程序工程test1

3)test1->属性 到达属性页->调试,将MyDll.dll所在的目录路径添加到 环境 中

4)将MyDll.lib的目录路径添加到VC++目录中的库目录中

5)将MyDll.h所在目录的路径添加到C/C++中的附加包含目录中

6)链接器->输入->附加依赖项 添加MyDll.lib

 7)将MyDll.h添加到测试程序中

注意:debug生成的dll lib只能用在debug中   release生成的dll lib只能用在release中

这篇关于在VS2015中创建C++动态链接dll,和两种调用动态链接dll的两种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130365

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u