VS2019生成DLL-程序员宅基地

技术标签: c++  随缘笔记  visual studio  开发语言  

1 、生成DLL

1.1 新建dll工程

在这里插入图片描述

1.2 编写dll函数

首先在头文件中进行函数声明,将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。通常它和extern“C”合用,形式如下:

/*pch.h*/

#ifndef PCH_H
#define PCH_H

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

extern "C" _declspec(dllexport) int myAdd(int a, int b);
extern "C" _declspec(dllexport) int myMax(int a, int b);

#endif //PCH_H

这是由于在制作DLL导出函数时由于C ++存在函数重载,因此__declspec(dllexport)FUNCTION(int,int)在DLL会被装饰,例如被装饰成为function_int_int,而且不同的编译器decorate的方法不同,造成了在用GetProcAddress的的取得FUNCTION地址时的不便,使用外部的“C”时,上述的装饰不会发生,因为ç没有函数重载,如此一来被外部的“C”修饰的函数,就不具备重载能力。

然后在phc.cpp文件中编写你的函数功能,如下所示

/*pch.cpp*/

#include <iostream>
#include<pch.h>

using namespace std;
int main()
{
    
    int a = myAdd(5, 4);
    cout << a << endl;
    int b = myMax(5, 4);
    cout << b << endl;
    return 0;
}


最后一步就是要生成dll和lib,只需要运行——生成解决方案,即可。

然后在工程项目的目录下找到dll和lib文件,在debug模式下生成就在debug文件夹,在release模式下生成就在release文件夹。

2、调用DLL

2.1添加头文件、dll和lib

将pch.h、framework.h存放到include目录;
Dll1.lib添加到liib目录;
Dll1.dll存放到根目录。
在这里插入图片描述

2.2添加库目录、包含目录、依赖项

在这里插入图片描述

在这里插入图片描述

2.3调用函数

/*main.cpp*/

#include <iostream>
#include<pch.h>

using namespace std;
int main()
{
    
    int a = myAdd(5, 4);
    cout << a << endl;
    int b = myMax(5, 4);
    cout << b << endl;
    return 0;
}

报错

在这里插入图片描述
将Dll1.dll文件放到项目根目录即可

参考文献

vs2019生成dll并调用的实现示例
extern "C"以及__declspec(dllexport) 讲解和def文件dll导出方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bblood307/article/details/122925944

智能推荐

jsonString 常用方法_josnstring-程序员宅基地

文章浏览阅读1.2k次。1. Map 转Json Stringimport com.google.gson.Gson;Map<String,Integer> indicatorDetails = new HashMap<>();Gson gson = new Gson();String jsonStr = gson.toJson(indicatorDetails);2...._josnstring

ios发布App遇到的问题:“*证书*”has one iOS Distribution certificate but its private key is not installed_has one ios distribution but its private key is no-程序员宅基地

文章浏览阅读1.1k次。解决方法:重新创建certificate证书,上传本机的CSR证书认证文件3.Production(一般只能创建3次)选中:App Store and Ad Hoc 然后下载证书到桌面,双击安装后,重新发布app到App Store中即可 转载自:https://blog.csdn.net/yishengzhiai005/article/details/7863..._has one ios distribution but its private key is not installed

Houdini VEX 学习笔记 (二)-程序员宅基地

文章浏览阅读1.1k次。//利用属性分开PrimitivePrimitive Split 节点中Attribute 设置为split 。Wrangle中代码为: f@split = @ptnum>10?1:4; 比较程序化的是利用Houdini 的Paint 节点,给物体描绘上颜色,然后利用颜色属性把Primitive 分开//曲线(在Vex中实现Carve节点的功能)最近在做植物生长的r..._houdini adjustprimlength

Qt+OSG/osgEarth跨平台编译(用Qt Creator组装各个库,实现一套代码、一套框架,跨平台编译)_qt osgearth-程序员宅基地

文章浏览阅读5.6k次,点赞9次,收藏46次。Qt+OSG/osgEarth跨平台编译(Windows、linux、macos)。用Qt Creator组装各个库,实现一套代码、一套框架,完成跨平台编译第三方库;实现一套代码、一套框架,完成跨平台编译OSG核心库、工具库、插件库及内省库,osgEarth核心库及插件库。_qt osgearth

【CCNA Exploration 4.0 路由协议和概念1】-程序员宅基地

文章浏览阅读184次。 一、路由器接口管理端口 路由器包含用于管理路由器的物理接口。这些接口也称为管理端口。与以太网接口和串行接口不同,管理端口不用于转发数据包。最常见的管理端口是控制台端口。控制台端口用于连接终端(多数情况是运行终端模拟器软件的 PC),从而在无需通过网络访问路由器的情况下配置路由器。对路由器进行初始配置时,必须使用控制台端口。 另一种管理端口是辅助端口。并非所有路由器..._路由器接口负责接收和转发数据包,接口类型有

Proteus 8 Professional中的基本元器件_proteus 8 professional元器件对照表-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏32次。英文名称中文名称图片BUTTON复位开关Resistors电阻crystal晶振_proteus 8 professional元器件对照表

随便推点

使用C++实现LR(0)语法分析器的操作_c++lr0-程序员宅基地

文章浏览阅读1.2w次,点赞16次,收藏99次。使用C++ 完成LR(0)的语法分析器由于最近学校里在学习编译原理,而且要求实现语法分析器,于是我用了几天的时间搞明白了语法分析器的原理并且将其实现了。由于编者还是本科生而且还在学习中,因此出现什么错误请各位指点。语法分析器的步骤为:读入单词序列读入语法规则构造基于该语法的Clousure(项目集规范族)集合基于上一步构造所有规范句型活前缀的DFA根据这个DFA来构造Action表..._c++lr0

Odoo XML中操作记录与函数-程序员宅基地

文章浏览阅读570次。转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826037.html一:XML文件中定义记录 XML中定义记录: 每个<record>元素有两个基本属性id和model,并且包含为每列分配值的<field>元素。如前所述,id属性对应于记录的外部标识符,模型属性对应于要写入..._odoo xml调用后台函数

LTE技术简介_lte标准-程序员宅基地

文章浏览阅读3.3w次,点赞3次,收藏41次。我们知道,LTE是一个和WCDMA、GSM类似的术语,指的是移动通信的一种技术体系。不过和WCDMA、GSM的命名方式又不太一样,从WCDMA我们可以看出所采用的关键技术,从GSM我们可以看到应用场合,从LTE的命名中,似乎看不出技术特点和应用场合,是一种玄妙的命名方式。一说到LTE,就会想到4G。移动通信技术经历了1G、2G、3G、4G,到现在的5G,分别表示的是第一、二、三、四、五代移动通信系统,每一代都有各自的主流移动通信技术。目前,GSM和WCDMA可以当之无愧地称为2G和3G的主流移动通信技术。_lte标准

【Tensorflow2.0】Tensorflow2.x的安装教程_couldn't get ptxas version string: internal: could-程序员宅基地

文章浏览阅读10w+次,点赞123次,收藏722次。anaconda 可以使tensorflow的安装变的简单昨天tensorflow 开发者大会刚开完,会上发布了关于 TensorFlow 2.0,TensorFlow Lite,TensorFlow.js,Swift for TensorFlow,TFX 等产品生态体系的最新更新和首次发布的内容,2019年任会支持tensorflow1.x,但是我们相信,版本的升级会带来易用性和使用性能的提升......_couldn't get ptxas version string: internal: couldn't invoke ptxas.exe --ver

软件安全复习(恶意代码部分)_bot是什么恶意代码-程序员宅基地

文章浏览阅读1.9k次,点赞58次,收藏48次。软件安全复习(恶意代码部分)_bot是什么恶意代码

pycharm 远程炼丹-remote debug。问题Couldn‘t upload helpers for remote interpreter: java.io.IOException: Can_proxycommand connect -h 127.0.0.1:15732 %h %p-程序员宅基地

文章浏览阅读764次。注释.ssh config 文件中的#ProxyCommand connect -H 127.0.0.1:15732 %h %p_proxycommand connect -h 127.0.0.1:15732 %h %p

推荐文章

热门文章

相关标签