前言
最近和QT打交道比较多,所以又掏出C++,市面上CAN设备有很多,既然sizhu对实惠的产品情有独钟,当然得给™安排好。(咱就一食草的,该干就算眼睛流口水也得想办法,好歹有得吃/(ㄒoㄒ)/~~)。
为了不重复写驱动程序(偷懒{{{(>_<)}}}),博主自个在逐步整合ZLG,kvaser等国内外CAN总线驱动(DLL),类似python-can的做法。
本篇仅分享怎么如何在Visual Studio中导入zlg,创芯两款驱动,以及一些需要注意的问题。
该话题的后续内容看“需求”。(●’◡’●)
开发环境
简单提一下,确实是QT有点坑,还是得说下(主要是为了水字数大业),在VS里自己玩自己那没事,但是要和QT“联动”就得相互兼容。
软件:Visual Studio 2022 Community(免费)
Windows 10 SDK:10.0.20348.0 (操作系统为Windows 10)
MSVC v141:VS 2017 C++ x64/x86生成工具(QT5.12支持2015和2017,版本需对应)
其他挺基本的就不列举了…
Ps:特别提醒下,QT默认安装是mingw编译器,MSVC需要勾选,同时安装两款软件,也许QT会自动去识别VS的MSVC,但也可能需要自己配…咳咳,偏题了,解决方法暂且存着,总之QT坑不少,还不好找,嘿嘿(⁎⁍̴̛ᴗ⁍̴̛⁎)
项目配置
Step0:没啥好说的,创个HelloWorld,空项目也一样。
Step1:解决方案资源管理器中找到对应项目(区分项目和解决方案),右键>>属性>>常规,修改平台工具集为 v141 ;修改WindowsSDK版本为10.0.20348.0。
接着选择VC++目录,这里修改了包含目录(头文件位置)和库目录(lib文件位置),到这里配置完成…但是还得水点。
可执行文件目录(exe文件位置)
引用目录(#using引用程序的文件位置)
Windows运行库目录(emem,好像是windows安装目录,一般用不到,默认即可)
源目录(cpp文件位置)
排除目录(顾名思义就是编译时不会被搜索的目录)
驱动导入
首先将对应版本的相关文件放到指定目录。
include目录:ControlCAN.h(创芯)和zlgcan.h(ZLG),以及相关头文件
lib目录:ControlCAN.lib和zlgcan.lib
运行目录(没打包前与包含main函数的源文件放一起,设置可执行文件目录后放里面应该也可以,打包后就和exe文件放一起):ControlCAN.dll和zlgcan.dll
再回到程序里,通过 #include 命令导入头文件
#include "ControlCAN.h"
#include "zlgcan.h"
#pragma comment(lib,"ControlCAN.lib") \\ 类似于附加依赖项
#pragma comment(lib,"zlgcan.lib") \\ 这个指令是MSVC的,QT的MinGW无效
#pragma comment(lib,“ControlCAN.lib”) 在VS中也可以通过在附加依赖项中添加ControlCAN.lib替代,但是QT没有,因此还是建议前者。
调用DLL中的程序
#include <iostream>
#include "ControlCAN.h"
#include "zlgcan.h"
#pragma comment(lib,"ControlCAN.lib")
#pragma comment(lib,"zlgcan.lib")
int main()
{
VCI_BOARD_INFO CXInfo[50];
int num = VCI_FindUsbDevice2(CXInfo);
std::cout << "cx设备的数量为:" << num << std::endl;
}
调用成功!!! 手头没有ZLG的CAN设备就不做演示,反正金主说加了整合的dll两款CAN都可以使用,嘿嘿U•ェ•*U
嘿嘿–资源
国产CANdll
ZLG和创芯的DLL驱动放资源里,自取…喜欢就点个赞╰(✿´⌣`✿)╯♡