• Visual Studio版本: 2019
    规定:生成dll的工程和使用dll的工程要保持下面三点保持一致
    1.debug或者release
    2.x86(win32)或者x64
    3.字符集

1.生成动态链接库

官方文档:https://docs.microsoft.com/zh-cn/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=msvc-160

生成动态链接库 .dll 同时生成 .lib 的原因:这个.lib并不是lib库而是引入库。

引入库文件 (.LIB): 包含该动态链接库包含的函数和变量的符号名。注意:虽然引入库文件和静态链接库文件的后缀名相同(.LIB),但是他们之间有着本质的区别,不可混淆。
动态链接库文件 (.DLL): 包含该动态链接库实际的函数和数据。在程序运行阶段,加载该文件,并将该文件映射到进程地址空间中,然后访问该文件中的相应函数。

选择一个空项目然后添加.c .h文件就好了,不需要添加main函数因为不生成可执行文件。
项目 -> 属性->配置类型->动态库
在这里插入图片描述

2.使用动态链接库

遇到错误解决办法参考文章
VS2019中设置了头文件路径却提示找不到头文件的一种原因

Visual Studio提示由于找不到dll,无法继续执行代码的问题解决

2.1找不到.h,.dll,.exe

1.首先添加路径

  • 头文件路径添加
    头文件
  • lib文件路径添加(这个lib并非静态库而是dll的引导文件)。具体dll文件应该放在哪里,请往下看。
    lib
  • lib命添加
    上面只添加了 .lib 的路径,这里把 .lib 的文件名写进去
    在这里插入图片描述
  • dll文件添加
    可以参考:https://blog.csdn.net/jiasu6905/article/details/106711851
    这里只说最简单的一种方式:把 .ddl 复制到工程编译输出文件目录下 eg:x64 -> debug下

2.添加路径还找不到的话

  • .h找不到
    可能原因:平台使用x86和工程使用x64不一致导致的(重点,不管是dll生成项目还是使用项目平台配置要保证相同,最开头提到的那三点)

  • .dll找不到
    存放路径不对,不是添加 .lib 路径就能找到dll
    1.添加系统环境变量
    2.把dll文件存放到输出文件目录

  • 字符集导致
    在这里插入图片描述
    解决:保持跟dll生成项目的字符集保持一致,并不是一定是下面的unicode
    在这里插入图片描述

2.2坑人的字符集问题

ASCII -> ANSI(多字节字符集)-> Unicode
ANSI(多字节字符集):在ASCII基础上衍生很多版本,比较出名的GB-2312
unicode字符集(UTF-16):为了统一多字节字符集而提出的一种字符集,后来为了处理单字节衍生出大名鼎鼎的UTF-8。

2、下列运算符中,在 C++ 语言中不能重载的是(D) A、* B、delete C、>= D、:: 说明: C++ 中不能重载的运算符:“?:”、“.”、“::”、“sizeof”和”.*”。 3、下面哪个函数...
public int CreateCmdsAndUpdate(DataGridView dgv) using (OleDbConnection connection = new OleDbConnection(dbConnectionString)) string queryString = "
前言:和静态链接库不同的是,静态链接库是在程序编译的时候就需要的,而 动态链接库 是在程序执行的时候才需要,在VS2017这样的集成开发环境之下, 动态链接库 的配置方式有很多,很多文章只说了其中一些,本文针对此种情况做一个简单的 汇总 。 一、直接拷贝法 将需要的 动态链接库 直接拷贝到和可执行程序的同目录之下,这是最常见,最通用的方法了。 二、拷贝到两个特殊的目录 32位的 x86的 动态链接库 ...
VS Code中编写Makefile文件。 所遇问题:输入时敲击的是 Tab 键,但是 make 时仍然报错, 错误 如图所示。 错误 原因:VS Code将 Tab 键默认为4个空格,导致 Tab 无法被 make 正常识别。 解决方法:设置
1, 动态库 生成 OK,但是 使用 时,编译 生成 使用 dll的应用程序时, 总是提示我在dll中导出的那个函数(假设函数为void expotedapi())是无法解析的外部符号。 出现这个问题的原因是在函数定义的.c文件中没有添加__declspec(dllexport)导致。 有问题的版本: void expotedapi() 正确的做法: __decls...
在Windows系统之中路径的分隔符是 使用 "\",而在Linux系统中分隔符 使用 "/",而现在JAVA程序如果要想让其具备可移植性,就必须考虑分隔符的问题,所以为了解决这样的困难,在file类中提供了一个常量。 public static final String separator File file = new File(“c:”+File.separator+“1.txt”); 在日后的开发之中,只要遇见路径分隔符的问题,都可以 使用 separator常量来解决,separator会自动根据当前的运行的
引用的dll路径问题 1、问题背景 在.Net项目中我们经常会引用一些dll,但是这些dll会默认在可执行文件目录下。如果dll较多,会显得该目录很臃肿。如果我们可以另外建一个目录专门存放这些dll就比较好。 2、解决方案 https://blog.csdn.net/xiaominggunchuqu/article/details/78749391 可参考上述博客地址,在app.config配置文件中进行配置。 <configuration> <runtime> cccgccg: 我用esp8266接收数据会多出以下数据:+MQTTSUBRECV:0,"/sys/k0s24Bho7Eu/esp8266_dev/thing/service/property/set",450, 我传入多个参数是甚至会接收到交错的数据,请问大家怎样让连接esp8266的串口不会接收到这些多余的非json格式的数据呢? ESP-MQTT-AT指令连接阿里云物联网平台 就是这样啊_: 博主你好,连接报错AT+MQTTCONN=0,"iot-06z00ik2k40zh0h.mqtt.iothub.aliyuncs.com",1883,1 +MQTTDISCONNECTED:0 ERROR ESP-MQTT-AT指令连接阿里云物联网平台 weixin_39483859: 大佬,你的这个AliYun配置工具哪里可以下载啊?谢谢! 蓝桥杯嵌入式比赛资源与技巧 ttcll6: 哪里可以拿到这些资源 ubuntu内核升降 三里十步: 不错,学习