使用Visual Studio 2022 创建lib和dll并使用
对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c++编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2022 来创建lib和dll,并使用。
静态库的创建并使用
首先打开Visual Studio 2022,点击创建新项目。

选择静态库,然后点击下一步。

点击创建。

Visual Studio 2022会自动生成以下代码:

然后打开项目属性,看一下配置是不是对的,一般来说都是对的。

看看是不是lib。

接下来就是写代码生成lib并测试一下:
1. 编写代码:
比如说,我就想编写一个输出hello World的代码,那该如何编写呢?
首先在头文件中,创建一个hello.h的文件

然后在头文件中,定义一个sayHello的方法。
#include<stdio.h>
void sayHello();

然后Hellolib.cpp在重写这个方法。
// Hellolib.cpp : 定义静态库的函数。
//
#include "pch.h"
#include "framework.h"
#include "hello.h"
// TODO: 这是一个库函数示例
void sayHello()
{
printf("Hello World");
}
- Visual Studio自动生成lib
右键点击这个Hellolib

点击生成,就行了。

生成成功:

3.如何使用:
先说一下,生成的lib的位置,就是在上一级的x64的debug文件夹里面。

在这里面新建一个空项目,用于测试lib的,我这里叫它testHello

在testHello里面新建两个文件夹,一个叫include,用来放.h的头文件的,一个叫lib,用来放lib包的。
将我们生成的那个lib放进去,还有之前定义的.h文件也放到include文件里面。
然后右击testHello,打开属性。

然后开始调整:
配置lib


一般来说,不创建源文件,它不会有c/c++编译器,那个选项
然后创建一个test.cpp的源文件。

创建源文件后,在设置一下。
配置include文件

我再说一遍,一定要先创建源文件,不然是没有c/c++的那个选项的。
然后编写相应的代码。
看这个时候,就已经出来了:

编写测试代码:
#include "hello.h"
int main() {
sayHello();
return 0;
}
然后点击运行,就会报错。

这个错误是因为在启动项目的时候,默认运行上一个项目了,我们将它改一下,就行了。
右击解决方案,点击属性。

把启动项目改一下,改成你要运行的那个项目就行了。

运行结果:

动态库的创建并使用
然后就是搞dll文件,新建一个Hellodll项目。

初始化,页面长这样。

创建头文件
#pragma once
#include"pch.h"
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
extern "C" MATHLIBRARY_API void sayHello();

一样的步骤创建cpp实现

点击HelloDll项目,右击生成。

运行结果:

查看生成dll的文件

在这里面新建一个项目 testDll
然后一样的处理,在testDll里面建立一个include文件夹和lib文件夹,include文件夹里面放头文件,lib文件夹里面放dll和lib

和

然后设置一下include属性

然后设置一下dll和lib

和

然后编写代码:
#include "Hello.h"
int main()
{
sayHello();
return 0;
}

然后配置一下运行的项目。

点击运行,查看结果,会报错:

然后,把这行#include"pch.h"代码删了

然后运行,运行成功。

由于本人不是主修c++的,有问题的,还请提出来,如确实如此,本人乐意接受。
使用Visual Studio 2022 创建lib和dll并使用的更多相关文章
- 在Visual Studio中使用.lib和.dll的环境搭建
1 静态库和动态链接库的区别 动态链接库是在运行的时候被调用的,静态库在链接的时候被链接到最终生成的应用程序(.exe)中 静态库需要用到的文件 (.lib .h) 头文件(.h)提供接口,库文件(. ...
- 使用Visual Studio 2022开发前端
前端开发环境多数基于Node.js,好处不多说了.但与使用Visual Studio开发的后端Asp.Net Core项目一起调试,却不是很方便,所以试着在Visual Studio 2022中开发前 ...
- [翻译]正式宣布 Visual Studio 2022
原文: [Visual Studio 2022] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意见,或 ...
- 它来了!!!有史以来第一个64位Visual Studio(2022)预览版将在今夏发布!
美国时间2021年4月19日,微软产品研发部一位负责人Amanda Silver在其博客上发布一则<Visual Studio 2022>的消息,表示将在今年(2021年)夏天发布Visu ...
- .NET6系列:微软正式宣布Visual Studio 2022
系列目录 [已更新最新开发文章,点击查看详细] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意 ...
- .NET6系列:Visual Studio 2022 线路图
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...
- Visual Studio 2022 预览版3 最新功能解说
我们很高兴地宣布Visual Studio 2022 的第三个预览版问世啦!预览版3 提供了更多关于个人和团队生产力.现代开发和持续创新等主题的新功能.在本文中,我们将重点介绍Visual Studi ...
- Visual Studio 2022 Community 不完全攻略
0. 前言 建议结合视频阅读哦 Visual Studio 2022 Community 不完全攻略 有问题或者意见欢迎评论 ! 1. 下载&安装 Visual Studio Communit ...
- Visual Studio问题集锦:coloader80.dll未正确安装
问题 今天在修改之前的一个项目的时候报了一个错,大概内容如下: 有一个 Visual Studio 的 DLL 文件(coloader80.dll)未正确安装.请通过"控制面板"中 ...
- Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor
在Visual Studio中创建混合移动应用程序的一个解决方案是使用Xamarin Portable Razor工具,这是ASP.NET MVC API针对移动设备的一个轻量级实现.Xamarin编 ...
随机推荐
- 【pytorch】从零开始,利用yolov5、crnn+ctc进行车牌识别
笔者的运行环境:python3.8+pytorch2.0.1+pycharm+kaggle用到的网络框架:yolov5.crnn+ctc项目地址:GitHub - WangPengxing/plate ...
- ios添加库文件
- 创建Anaconda虚拟Python环境的方法
本文介绍在Anaconda环境下,创建.使用与删除Python虚拟环境的方法. 在Python的使用过程中,我们常常由于不同Python版本以及不同第三方库版本的支持情况与相互之间的冲突情况, ...
- 关于TCP 四次挥手过程中的reset包问题
数据包过程 TCP状态机转换过程 客户端在接受到第32个数据包之后,应该发送1个对FIN的ACK数据包,然而客户端缺直接连续发送了3个Rest数据包36~38,客户端并未进入time wait阶段,直 ...
- 在线PNG, JPG, BMP 转ICO图标,适用WINDOWS XP, VISTA, 7, 8, 10
在线PNG, JPG, BMP 转ICO图标网址: http://static.krpano.tech/image2ico 该网站可以把PNG, JPG和BMP图片转换成包含多个层级的ICO图标, 可 ...
- 一款广受社区好评的 WAF
大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站,但是自建网站很容易被收到攻击,今天给大家介绍一款简单免费好用的 WAF 网站防护工具. WAF 是 Web Application Fi ...
- 6.1 KMP算法搜索机器码
KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的.KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当 ...
- Navicat连接MySQL,出现2059 - authentication plugin 'caching_sha2_password'的解决方法
cmd(管理员)登录mysql执行如下 ALTER USER 'YOURUSERNAME'@'localhost' IDENTIFIED WITH mysql_native_password BY ' ...
- PostgreSQL学习笔记-3.基础知识:CROSS、INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER、UNION
PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 在 PostgreSQL 中,JOIN 有五种连接类型: CROSS JOIN :交叉连接INNER ...
- python - networker api
Getting Started,概述 NetWorker REST API is an interface that provides programmatic access to the Net ...