VS2019编译生成动态链接库dll的两种方式

这篇具有很好参考价值的文章主要介绍了VS2019编译生成动态链接库dll的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一步:创建“动态链接库(DLL)”项目

VS2019编译生成动态链接库dll的两种方式

 dll项目的默认结构如下:

VS2019编译生成动态链接库dll的两种方式

 四个文件的内容因为是默认生成的,不是特别重要,接下来就是重要的修改部分:

第二步:将自己的类定义函数或者函数迁移到dll项目中

方法一:修改“pch.h”和“dllmain.cpp”文件,可以参考以下博主链接,但博主的引用部分有些繁琐,文末会介绍我的引用方法,和正常引用外部库步骤是一样的。这个方法的优点是编译简单,很顺利生成dll和lib文件。但是引用时,需要#include"pch.h",在不修改pch名称的条件下,生成多个dll后,引用时可能会有些冲突。具体的引用操作,文章最后会介绍。

(30条消息) c++生成DLL文件(visual studio 2019)面向小白萌新_西瓜6的博客-CSDN博客_c++生成dll

这里贴上我的代码,将以上博主的函数封装成类。

“pch.h”,补充了两部分,一个是预编译的标头,一个就是预编译函数的头文件。

其中关键的一点是,在类名前加上“SimpleCal_API”,这个名称可以随意修改。

// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"

#endif //PCH_H

#define SimpleCal_API ;
#ifdef SimpleCal_EXPORTS
#define SimpleCal_API __declspec(dllexport)
#else
#define SimpleCal_API __declspec(dllimport)
#endif


class SimpleCal_API Mycal {

public:
	int my_add(int a, int b);

	int my_minus(int a, int b);

	int my_multiply(int a, int b);

	double my_divide(int a, int b);
};

“dllmain.cpp”,删除了默认的内容,补充了预编译函数的源文件。

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"

int Mycal::my_add(int a, int b) {
	return  a + b;
}

int Mycal::my_minus(int a, int b)
{
	return a - b;
}

int Mycal::my_multiply(int a, int b)
{
	return a * b;
}

double Mycal::my_divide(int a, int b)
{
	double m = (double)a / b;
	return m;
}

随后点击菜单栏点击“生成”->“生成解决方案”,结果如下就是生成成功了。

VS2019编译生成动态链接库dll的两种方式

 方法二:不修改默认生成的四个文件,而是新建一个“smp.h”文件放置生成代码和一个"Source.def"文件。这样生成的dll文件引用时,就可以#include“smp.h”。

VS2019编译生成动态链接库dll的两种方式

“smp.h”文件,对于大的项目代码,也可以拆为一个头文件和一个源文件,注意“Smpclass_API”的添加就行。

#pragma once

#define Smpclass_API ; //Don't forget to add before class if build dll
#ifdef Smpclass_EXPORTS
#define Smpclass_API __declspec(dllexport)
#else
#define Smpclass_API __declspec(dllimport)
#endif

 class Smpclass_API Mycal {

	public:
		int my_add(int a, int b) {
		return  a + b;
		}

		int my_minus(int a, int b)
		{
		return a - b;
		}

		int my_multiply(int a, int b)
		{
		return a * b;
		}

		double my_divide(int a, int b)
		{
		double m = (double)a / b;
		return m;
		}
};

"Source.def"模块定义文件,作用是如果不添加,无法生成lib文件。直接新建一个,文件内容不用任何修改。

VS2019编译生成动态链接库dll的两种方式

 属性修改部分:

菜单”项目“->"属性管理器"->"C/C++"->"预处理器“->"预处理器定义"添加预编译头的#ifdef 后的”Smpclass_EXPORTS

VS2019编译生成动态链接库dll的两种方式

 之后和第一种方法一样生成解决方案就行。

补充一句就是,生成的dll和平台有关,可以选择debug/release 以及X64/X86;同时可以选择不同的平台工具集。

VS2019编译生成动态链接库dll的两种方式

 第三步:新建项目引用自生成的dll文件

1. 包含头文件目录

2. 包含lib文件目录

3. 链接器附加依赖项,添加lib文件

4. 将dll文件复制到所需项目的文件中

以上述第二种方法生成的dll项目,项目名”Dll3“, 举例说明如下:

头文件目录:”smp.h“所在的路径,”{你的项目路径}/Dll3“

lib文件目录:"Dll.lib"所在的路径,”{你的项目路径}\Dll3\x64\Release“

VS2019编译生成动态链接库dll的两种方式

VS2019编译生成动态链接库dll的两种方式

新建的引用项目文件目录:

 VS2019编译生成动态链接库dll的两种方式 

引用代码如下:文章来源地址https://www.toymoban.com/news/detail-407372.html

#include "smp.h"
#include <iostream>


int main() {

	Mycal cal;
	int a = 1;
	int b = 2;
	int c = cal.my_add(a, b);
	std::cout << c << std::endl;
	return 0;

}

到了这里,关于VS2019编译生成动态链接库dll的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SSRS开发的两种方式(VS中集成SSDT组件的开发方式)和(sql server端SSDT的开发方式)//Dynamics 365 开发reports的两种方式

    下载 SQL Server Data Tools (SSDT) for Visual Studio SQL Server Data Tools (SSDT) 是一款新式开发工具,用于生成 SQL Server 关系数据库、Azure SQL 数据库、Analysis Services (AS) 数据模型、Integration Services (IS) 包和 Reporting Services (RS) 报表。 使用 SSDT,你可以设计和部署任何 SQL Server 内容类型,就像在

    2024年02月11日
    浏览(48)
  • VS2019生成的DLL,给QT(MinGW版本)使用的小结

    a 基于生成一个DLL的工程(要注意生成是x86,还是x64的,需要和后面的QT的App工程对应),这里不多解释了,网上多的是; b 在cpp实现文件里,假如要导出一个这样的函数: 那么,它对应的头文件,如abc.h,一定如下:即在头文件里,使用了extern \\\"C\\\"来限制这个函数名,这样的

    2024年02月12日
    浏览(41)
  • vue 生成二维码的两种方式

    方式一:qrcode(无 icon 图标) 完整代码 方式二:vue-qr(有 icon 图标) 官网地址:vue-qr - npm import 引入方式 完整代码 相关配置属性 属性名 含义 text 编码内容 correctLevel 容错级别(0 - 3) size 尺寸,长宽一致, 包含外边距 margin 二维码图像的外边距,默认 20px colorDark 实点的颜色

    2024年02月15日
    浏览(41)
  • k8s快速生成yaml的两种方式

    第四. 验证nginx的pod是否正常

    2024年02月15日
    浏览(55)
  • 通过软链接方式安装节省C盘空间—以VS2019非系统盘安装为例

    点击.exe文件,下载完成至安装组件界面: 然后退出! 3.1 命令: VS 2019占用的系统盘文件夹路径(以系统盘符 C盘软链接到D盘为例): 以上这些 必要的文件夹 如果有文件在里面,就把这些文件夹移动到非系统盘,如果没有文件就删除他们(因为之后我们要创建链接,源路径

    2024年02月06日
    浏览(41)
  • windows VS2015 Steup 打包发布软件并附带动态链接库dll

    打包:  方法一:VS 2015 Steup 打包发布软件_柠檬野生菌的博客-CSDN博客_vs2015 exe发布  1、插件下载 Microsoft Visual Studio 2015 Installer Projects 工具-扩展与更新-联机-搜索 Installer Projects 2、安装 关掉VS 双击下载好的 .exe 安装 3、打开VS新建Steup Project项目 注意项目名称 需要跟你打包的

    2024年02月06日
    浏览(51)
  • VS2022环境下C++ DLL动态链接库的编写和调用

    1、新建动态链接库项目 2、新建类 3、宏定义 4、使用宏定义修饰类 调用DLL动态链接库大致有两种方法: 一种是“隐式调用”,需要.h头文件、.lib符号文件、.dll动态库文件; 一种是“显示调用”,需要.dll动态库文件; 此处介绍第一种调用方式。 1、创建项目 2、项目属性

    2024年02月14日
    浏览(50)
  • 运行QT的.exe程序出现缺少动态链接库以及无法定位程序输入点的两种不同情况的解决办法

    一、出现无法定位程序输入点的错误 出现这种情况是因为下面的设置造成的 因为QtCreator的环境变量在mingw环境变量的上方造成的。 具体解决办法是将上面的环境变量下移即可。 至于为什么会这样,可以自行查找啦。 二、出现缺少动态链接库dll的错误 在加入mingw-64的环境变量

    2024年02月04日
    浏览(46)
  • 清理构建目标文件夹的两种方式:webpack配置选项 VS clean-webpack-plugin插件

    92. 清理构建目标文件夹的两种方式:webpack配置选项 VS clean-webpack-plugin插件 在 webpack 中, clean: true 是一项配置选项,而 clean-webpack-plugin 是一个插件。它们的作用是清理(删除)构建目标文件夹中的旧文件。 1. clean: true 配置选项: 在 webpack 的配置文件中,你可以使用 clean 配

    2024年02月11日
    浏览(47)
  • [Vue]从数据库中动态加载阿里巴巴矢量图标的两种方式

    记录一次在Vue中动态使用阿里巴巴矢量图标库 这是本人第一次使用阿里巴巴的矢量图标库,简单的导入和使用的话网上的教程很多,这里不多赘述,本人的需求是从数据库中加载出来并且显示到页面上,接下来简述一下如何实现。 以下代码均是本人实际推敲、测试可用后写

    2024年01月20日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包