- 博客(63)
- 资源 (3)
- 收藏
- 关注
原创 C++智能指针使用详解
智能指针是C++标准库提供的类模板,用于自动管理动态分配的内存,防止内存泄漏。它们遵循RAII(资源获取即初始化)原则,在对象生命周期结束时自动释放内存。C++智能指针是现代C++编程中必不可少的工具,它们提供了自动内存管理,帮助防止内存泄漏和其他资源管理错误。关键点总结:std::unique_ptr:用于独占所有权场景,性能开销小std::shared_ptr:用于共享所有权场景,使用引用计数std::weak_ptr:用于解决循环引用问题,提供弱引用。
2026-06-04 21:39:11
35
原创 MSbuild
(Microsoft Visual Studio Community 2017, Visual C++ 2017) (即 Microsoft Visual C++ 2017)MSbuild和msvc的关系,msbuild更像是构建工具,类似于make,而msvc是编译、链接工具,类似于gcc。使用c++的桌面开发,此负载包括了cl编译器和link程序。
2026-06-04 21:30:15
73
原创 C++ 内存详解
理解C++内存管理是成为高级C++开发者的必经之路。从基础的内存布局到高级的多线程内存模型,再到现代C++的内存管理实践,都需要系统性地掌握和实践。
2026-06-04 21:29:32
107
原创 链接和库整理
Windows系统:.dll (Dynamic Link Library)Unix-like系统:.so (Shared Object)Unix-like系统:.a (Archive)在编译时将库代码直接复制到最终的可执行文件中。可执行文件只包含对库的引用,不包含库代码本身。部署复杂(需要确保目标系统有正确版本的库)动态库(Dynamic Library)运行时加载(实际代码在运行时才载入内存)静态库(Static Library)生成的可执行文件包含所有需要的库代码。多个程序无法共享库代码(内存浪费)
2026-06-04 21:29:03
102
原创 无法定位程序输入点 SetThreadDescription 于动态链接库 KERNEL32.dll
Windows Server 2016,Windows 10LTSB 2016 和Windows 10版本 1607:SetThreadDescription 仅在 KernelBase.dll 中的运行时动态链接可用。
2026-06-04 21:27:57
792
原创 C++ 编译过程详解
4阶段(传统)6阶段(细化)主要任务预处理预处理宏扩展、头文件包含编译词法分析源代码–>Token语法分析Token–>AST语义分析类型检查、作用域分析代码生成与优化AST–>汇编代码+优化汇编汇编汇编代码–>机器码(.o)链接链接合并.o,解析符合,生成可执行文件本质上,6阶段划分只是把"编译"阶段拆解得更细,核心流程仍然是:源代码 → 预处理 → 编译(前端+后端)→ 汇编 → 链接 → 可执行文件。
2026-06-04 21:24:19
242
原创 查看windows dll是x64还是x86
使用下面命令查看windows dll是x64还是x86。8664 → x64(64位)。14C → x86(32位)。
2026-06-04 21:19:52
151
原创 C/C++ 程序段的概念与分类
在C/C++编程中,程序可以划分为几个主要的部分或"段"(segment),这些段在程序编译、链接和执行过程中扮演不同的角色。
2026-06-04 21:18:50
260
1
原创 软件协议整理
用 【Apache 2.0】(OpenNI 原版,最规范)如果你做 动态库 SO,允许别人调用但不开放源码。用 【商业私有协议】(最安全,保护代码)如果你做 闭源商用 SDK(给客户用)用 【LGPL 2.1】如果你做 开源但可商用。
2026-06-04 21:17:23
194
原创 VS 自动化编译
QQ:2967732156“C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/devenv.com” E:/Pro/Test.sln /rebuild “Release”“C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/devenv.com”E:/Pro/Test.sln/rebuild“Release”中间空格连接devenv.com和
2021-08-24 18:02:17
519
原创 QShareMemory实现应用的单一运行
QQ:2967732156拿到一个应用的开发,第一个考虑的问题是:该应用是不是需要单一运行?诸如,涉及到串口,网络通信,数据库开发,通常此类应用程序都是单一运行的。QT提供了QShareMemory,可以简单且高效的实现单一应用的功能。第一次运行时,应用中创建一块共享内存,第二启动应用,可以访问这块内存,那就说明已经有应用在运行了代码实现如下:#include"QApplication.h"class QSharedMemory;class SingleApplication : pu
2021-08-24 10:39:59
666
原创 QT 正则表达式
学习11、函数 :indexIn() 返回在待检测字符串中,第一个符合表达式规则的位置captureCount()返回匹配个数,但是不止为何,比capturedTexts()返回list的count少1capturedTexts()返回匹配后的列表,扩张一下QStringList的count和size是一样的2、实例QRegExp rx("(\\d+)(\\s*)(cm|inch(es)?)");// 例如,"inch(es)?" 可以匹配 "inch" 或 "inches" ;? 等价于 {0
2021-07-13 15:17:46
679
原创 QT 串口通信,操作程控电源 Agilent 66312A
背景:用QT来写个串口通信小工具,操作程控电源Agilent 66312A ,能够设置电压,获取电流步骤:1、Agilent 66312A RS-232配置按图中步骤,确保程控电压调制RS-232模式,其他为默认参数。2、QT开发小工具3、总结说明a.不要想着从网上能扒拉出一切需要的东西,QT的串口通信,一搜一大把,但是结合到实际程控电源的,真没找到匹配的。b.一定要阅读程控电源的开发文档,收发的命令都在文档中。c.通过程控电源来获取电流,采样间隔可能不同,但拿到的都是平均电流。最后给出
2021-07-08 17:23:21
2258
2
原创 多相机时,实现相机UVC与HID的绑定
项目场景:相机同时支持UVC跟HID协议,多相机时,如何实现同一个相机UVC的DevicePath和HID的DevicePath的绑定??问题描述:相机同时支持UVC跟HID协议,起初用DirectShow获取devicepath,然后打开控制通路更视频通路。现在补充部分控制命令,走HID协议。单相机时,只需要匹配设备的PID 和VID 即可完美的工作;但是需要接多个相机时,比如两个相机A/B,发现A相机的UVC部分没问题, 但是HID确打开的是B相机。原因分析:取HID的DevicePath只是
2021-07-03 14:35:53
959
原创 函数封装小记
记录一下此时的感受:很多朋友,尤其是刚开始写代码的朋友,基本的操作,就是一个函数干全部,代码行数很多。这样既不利于,他人的阅读,也不利于日后自己的复盘。函数的封装作用:1、功能模块化,1个函数干一个事情2、逻辑层次化,总的实现,会分好多个步骤,步骤次序就是逻辑的分层。总而言之,就是代码更可读,逻辑更调理...
2021-02-05 09:37:17
211
原创 QT Connect/Disconnect
提醒点如下:1、关注connect/disconnect的返回值2、在创建connect时,一定注意位置,确保只创建一次,否则变量没释放,又connect了,emit之后,会多次进入槽函数。3、原则上不需要调用disconnect,因为对象被释放时,会自动释放该对象的connect。切忌注意 “connect创建的次数”,虽然很简单的点,一旦忽略,排查起来也是需要费些功夫的。再往下就可以忽略不看了,因为写的很乱,旨在记录自己遇到的问题。上面是connect & di.
2021-01-26 17:59:10
2454
3
原创 C/C++ 数据类型sscanf崩溃
背景:typedef struct{uint16_t a;uint16_t b;}T;char tokenstring[] = “1,2”;T t = { 0,0};sscanf(tokenstring, “%hu,%hu”, &t.a,&t.b); // C4996cout <<(int) t.a << " " << t.b<<endl;用%d 退出的时候崩溃。需要了解具体的类型的同学,可以查看https://blo
2020-08-29 17:44:54
904
原创 DirectShow IGraphBuilder 反复创建释放,导致内存不断增大
#include <windows.h>#include <tchar.h>#include <atlbase.h>#include #include #include <atlbase.h>#include <dshow.h>#include <ks.h>using namespace std;int main(int argc, char *argv[]){int index = 0;;for (;????
2020-08-29 17:36:15
443
原创 the Segmentation fault 18.04
18.04 报错,16.04就没问题。跟踪代码,发现是string 赋值的问题string devicePath;错误代码:devicePath = string("/dev/")+name;修改成如下格式就okstd::string dpath=string("/dev/")+name;devicePath = dpath;
2020-08-29 17:28:06
207
原创 求平均趣点
在写程序的时候,经常用到求平均,比如循环记录某段代码的执行时间方法A:T =( T1+…+Tn )/n方法B:T=T1;T=(T+T2)/2;…T=(T+Tn)/2;说明:A是全部求和,再取平均;B就很有意思,均值,与下一个采样值,再取均值结论,取均值用A肯定没问题,如果用B就需要考量考量了...
2020-08-29 16:32:34
156
原创 an unhandled exception was encountered during a user callback
如上问题,乍看上去感觉一点头绪没有??但实际上问题在明显不过,“callback”,那么ok,debug调试,复现问题,定位到函数A,发现函数A还真是在回调函数中调用的。A(){p->xxx();}指针调用,崩溃了。so,进一步分析,指针出问题,无外乎没new就用,或者是被释放了又调用。继续跟踪,如上原因,确实是在别的地方释放掉了,然后又调用来。...
2020-08-29 16:28:21
812
原创 USB设备,HID设备,UVC设备,及驱动,概念补漏
1、USB设备USB设备是USB电缆末端的一个硬件,它执行用户功能。可以将USB设备分为USB总线接口、USB逻辑设备和功能设备三部分。主机到设备的连接需要经过多个层和多个实体之间的交互作用,USB总线接口层提供了在USB数据线上数据的底层传输。按照USB设备功能的不同,可以把其分为两大类:集线器和功能设备。集线器(Hub)是USB系统的关键部件,它提供了USB设备和主机之间的电气接口。USB连接器的连接点被称为端口,它用于扩展主机的USB端口,USB设备(包括功能设备和其他集线器)可以通过其下行端口.
2020-08-29 16:13:36
4564
原创 Libusb获取设备描述符,字符串描述符
问题:windows 上用Libusb 获取iproduct字符串时,得到的是iinterface的字符串??原因:https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/hidsdi/nf-hidsdi-hidd_getproductstring
2020-08-29 15:44:05
1603
原创 int 转 QByteArray bytes 转float
QByteArray intToByte(int number){QByteArray abyte0;abyte0.resize(4);abyte0[0] = (uchar)(0x000000ff & number);abyte0[1] = (uchar)((0x0000ff00 & number) >> 8);abyte0[2] = (uchar)((0x00ff000
2018-01-22 10:50:00
1225
原创 QT 局域网聊天 C/S
一个局域网聊天小公举主要涉及:1、C/S架构2、TCP协议3、数据库4、登录界面实现登录、注册、找回密码5、主界面实现用户状态的显示6、聊天界面实现文本及文件的传输
2017-12-08 17:35:30
825
6
原创 QT tcp server 多线程
QT 编写一个TCP 协议的Server端,支持多客户端连接,一个连接交由一个线程来处理。需要用到 QTcpServer QTcpSocket QThreadQTcpServer 最主要的一个incomingConnection函数说明由定义就可以知道,当QTcpServer监听到一个可用的连接时,会有一个socket descriptor 。也就是说服务端
2017-12-06 10:59:07
5862
2
原创 innosetup 界面默认选择系统语言
之前的文章中已经做过多语言的安装包今天补充一下,如果获取系统语言,这样在英文系统下,界面显示为英文主要是在做升级包的时候用到,因为升级包不需要在做多语言直接上代码:[Setup]LanguageDetectionMethod=uilanguageShowLanguageDialog=no [Languages]Name: "c
2017-11-09 19:25:20
7551
5
原创 VS + QT +FFTW
最近帮助其他人搞个小东西,用QT实现快速傅里叶正逆变换网上很多需要的C++ fft ifft 有个限定条件,采样点数为2的N次幂,这就导致取任意个数的时候,得出的结果跟matlab的结果不一致。原因是matlab在做变换的时候进行了修正,具体方法不详。这样一来,封装fft ifft 就不太现实了。那么怎么办呢?万能的网络,要
2017-08-22 10:43:59
1398
原创 QT UDP 多网卡 禁用/启用有线网卡
近期做了个关于UDP广播的应用,笔记本上有有线网卡、无线网卡、虚拟网卡等测试发现,有线的插拔会影响广播的发送,插拔以后,UDP始终是走有线网卡发送,禁用有线网卡,UDP就可以从无线网卡发送出来,具体原因没有仔细研究。为了解决这个问题,采用的方法是如果发现有线拔掉了,就禁用有线网卡,在启用有线网卡。相关代码,后续给出
2017-08-15 15:16:42
2692
1
原创 共享内存---结构体使用
共享内存主要是通过映射机制实现的。 Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。当调用 CreateFileMapping 创建命名的内存映射文件对象时,Windows 即在物理内存申请一块指定大小的内存区域,返回文件映射对象的句柄 hMap。为了能够访问这块内存区域必须调用 MapViewOfFile 函数
2017-08-15 10:56:17
4405
原创 Innosetup 将文件安装到system32 、syswow64下
需求:在安装的时候将制定的文件,安装到system32 、syswow64下win7 64 位电脑 Source: ".\a.dll"; DestDir: "{win}\System32"; Flags: ignoreversion DestDir:不管设定的{win}\System32{sys}为什么都是安装到C:\Window
2017-08-07 15:07:05
4546
原创 innosetup卸载删除文件
需求背景:innosetup原则上是安装哪些文件就卸载那些文件。但实际上往往会在应用的使用过程中,会生成一些日志文件。在卸载的时候,不能删掉,会提示手动清理。这样还是挺影响体验的。解决方法:procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);begin if CurUnin
2017-07-06 10:10:23
7988
原创 Innosetup 操作ini文件
需求背景:应用是多语言的,由ini文件控制具体是哪一类语言。安装程序也是多语言的,在选定安装包语言之后需要同步更新ini文件里面的语言值ini文件如下:[General]language=en多语言部分http://blog.csdn.net/yuyefuxiao521/article/details/73910642已经说过了下面重点说一下,修改ini 文件的va
2017-07-06 09:51:26
5782
原创 innosetup if else 语句中 end 之后; 讲解
起初一直用的是百度出来的innosetup版本,一直没有注意 if else 语句中 end 之后;的问题,换成Unicode版本之后,原本的可用的脚本竟然出错了。总结一下:if xx then begin end;if xx then begin endelsebeginend;单个if语句 end
2017-06-30 10:56:04
1696
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅