- 博客(36)
- 收藏
- 关注
原创 Windows下VS2017编译Qt5.6.3源码动态库
因为要使用VS2017还得兼容XP,5.6.3是支持XP的最高版本,目前网络上好多资料都是收费的或者是讲的很笼统地,所以我自己写一下过程记录一下。目录加入环境变量Path中即可使用,可以选择不安装Qt5.6.3,记得重启一下。将编译结束后的源码的。
2024-04-08 10:11:43
639
原创 打刻错误识别物理光驱问题排查报告
在这种情况下光驱无法使用,状态也不稳定(时隐时现),而且光驱原本PCI总线上的03:00.0的USB控制器类型变为00:08.2的SATA控制器类型,设备的ID也发生了变化。这种情况下用来测试的同一个物理光驱会存在一个正常的(情况二图片)与一个异常的(上面图片)两种状态,正常的光驱还是可以使用,但是异常的无法使用且状态不稳定(时隐时现)。在这种情况下光驱是无法正常使用的,而且状态不稳定(时隐时现)也没有系统唯一识别的ID。硬件主板接线存在问题。
2024-04-01 14:22:14
389
原创 Windows下Dll注入与API拦截
让我们来看一个例子。当这个通知被处理时,U s e r 3 2 . d l l便检索保存的这个关键字中的值,并且为字符串中指定的每个D L L调用L o a d L i b r a r y函数。当每个库被加载时,便调用与该库相关的D l l M a i n函数,其f d w R e a s o n的值是D L L _ P R O C E S S _ AT TA C H,这样,每个库就能够对自己进行初始化。在理想的情况下,你的D L L只应该映射到需要的进程中,同时,它应该以尽可能少的时间映射到这些进程中。
2024-03-25 17:34:41
1287
原创 MFC中C2893 未能使函数模板“unknown-type std::invoke(_Callable &&,_Types &&...)”专用化 websocket_server问题解决
这个问题的引起一定是线程入口函数的参数问题引起来的,特别是当时用的线程入口函数是类中的成员函数的时候,在MFC中不光需要传入类中该函数的地址也需要绑定一个当前类对象的地址,记住在MFC中都是地址!但是在控制台应用程序中你可以传输该类对象也可以传输该类对象的地址!...
2021-05-06 16:01:30
1915
原创 求最长的重复子串
这个是牛客的原题链接题目链接,因为在网上看到一位大神的代码写的很好,但是没有仔细讲解所以我写这篇博客讲解一下代码以后自己复习也方便:我们假设给定的字符串中重复的片段长度为i,不重复的长度为s,字符串的总长度为len,那么三者满足关系2*i+s=len,而这个重复片段最长就是len/2,题目要求最长重复子串长度,我们可以从i=len/2开始倒着枚举,检查到底是满足哪个重复长度,第一个满足的肯定就是最长的而对应的s当然要从0开始。下面我们先写一个函数来检查当前长度下是否是重复的:bool judg
2021-04-16 16:14:12
168
原创 C++实现关于未排序数组求固定累加和最长子数组的系列问题
我这篇博客是为了方便以后自己复习所以记录一下这个问题,一切都基于这篇博客博客链接,因为是java版本的,所以我在这里写个C++版本的也方便自己复习。首先先简单整理一下思路:一、假设s(i)是子数组arr[0…i]的累加和,那么s(j)就代表arr[0…j]的累加和,那么可求得arr[j+1…i]=s(i)-s(j)。二、假设我们的固定累加和为k,给的数组为vector<int> arr,那么我们用sum来表示s(i),也就是arr[i]的累加和,写为sum+=arr[i];我们用le
2021-04-13 10:39:26
206
原创 C++实现题目链表每k个一组翻转
这个题目来自牛客网,这是链接原题链接,我看到别人的一个递归写法觉得手法非常漂亮,所以写这篇博客分析一下代码以便以后自己复习,相关的解释都在代码里边://这个递归函数的功能是返回当前这一组的首节点ListNode* reverseKGroup(ListNode* head, int k) { if(!head||k<=1)return head;//如果为空或者一个一组等于不反转直接返回就行。//下面的手法其实是链表翻转问题的常用写法,temp是用来保存当前节点的下一节点,然后
2021-04-07 17:43:16
327
原创 关于DP问题解决最长字串与最长子序列的问题(C++实现)
本来是在牛客网上做到的最长字串的题,下面是链接,这俩问题的区别就是最长字串是要求连续,最长子序列不要求连续,但是核心思想是一样的。牛客网最长字串我也看了ACWING竞赛网址中的这个题,Y总讲的非常好!链接在下面,大部分人都应该觉得当最长字串都必须包含最后一个字符时,肯定是f[i][j] = f[i-1][j-1]+1;但是在竞赛题解中这个例子yagdazddszvxoohdxntchoconxuuyw与oyignzcpgpelpltgoltszeaayugamlcrteuradbkqfvbeqe
2021-04-06 17:16:08
175
原创 找到字符串的最长无重复子串
下面是两种方法,第一种只用了双指针,没涉及到哈希表,这个题给我说明了双指针不只是头尾指针,也可以是一前一后甚至是同一个起点给我涨知识了,下面直接上代码了。原题链接一、int maxLength(vector<int>& arr) { int k = 0; int MAX = INT_MIN; int j = 0; for(int i=0;i<arr.size();i++){ for
2021-04-04 18:08:43
206
原创 关于fopen函数与OpenFile函数以及sscanf与sprintf函数使用时应该注意的问题总结
在写项目代码的时候碰到了这几个问题,其实如果早就知道的话很简单的问题,下面挨个总结一下: 1、fopen函数,如果只是单纯的读("r"),即便你不使用fclose函数大概率可以正常使用,虽然这样并不安全;但是如果你写("w")的话,如果不使用fclose函数的话,数据没有保存到硬盘上,只存在程序运行的时间内,这样当你程序结束以后,对应的文件中仍然是没有数据的!综上要谨记fopen与fclose一定要成对使用! 2、然后对于OpenFile函数来讲,读操作(_lr...
2021-01-11 20:57:50
314
原创 递归实现指数型枚举
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:输出样例:322 311 31 21 2 3...
2021-01-10 00:24:51
122
原创 MFC重名函数有的加::有的不用是因为什么?
在MFC中有很多重名函数,这是因为有的是微软的API,没有记错的话一般在电脑的user32.dll这个动态库中,这个可以直接百度微软的常见动态库就能搜索到很多,下面这个链接也详细讲述了相关方面微软API与MFC类库当我们在MFC自己创建的窗口类中进行操作时,就是…Dlg这个类,我们在它的成员函数中进行调用时,比如下面这两个函数:void GetWindowRect(LPRECT lpRect) constBOOL SetWindowPos(const CWnd* pWndInsertAfter, in
2020-11-24 22:14:06
191
原创 C++实现大顶堆的插入删除操作
其实无论是大顶堆还是小顶堆,会了一个就会另外一个的写法了,这个其实并不难写,我的理解是:所谓插入其实就是往上渗透,所谓删除其实就是往下渗透,他们都是在找最后一个点的合理位置!下面直接上代码了,相关解释都在注释上:template<class T>class My_Heap{public: My_Heap(int a = 10){ MaxSize = a; CurrentSize = 0; Array = new T[MaxSize]; } ~My_Heap(){ de
2020-11-16 22:30:44
437
原创 C++实现基数排序(LSD)
很久之前学习过基数排序当时觉得麻烦没有仔细看,现在回过头来发现这个东西其实挺有意思的,现在搞明白了LSD就是从小到大排列的(对于数据的处理从右边最低位开始),但是对于MSD(对于数据的处理从左边最高位开始)我还没有搞明白,发现我脑子是有点笨,以后搞懂了再写博客记录,现在先记录一下LSD的实现方式(使用STL链表):我现在的理解是先从个位数开始挨个放入桶中,这些桶可是排好序的,基数排序是桶排序的升级这些基础的东西我就不仔细说了,这是第一轮排序,把他们从最小的桶开始一一取出来先放入存储的数组中,这个时候个位数
2020-11-09 21:26:12
505
原创 C++实现链表的翻转
因为我自己太傻逼犯了很弱智的错误,所以我写博客记住这种写法,我认为没有比这种写法更好的翻转链表的写法:void Reserve(ListNode<T1>*pHead){ ListNode<T1> *p = pHead->pNext; ListNode<T1> *q = nullptr; while (p){ ListNode<T1>*r = q;//用一个新的指针在保留q的就可以实现第一个指向空 q = p;//在改变p之前一定
2020-11-05 19:51:10
150
原创 C++实现顺序队列
顺序栈比较容易实现但是顺序队列会有一些小问题,在网上看了很多博客但是下面两个问题我没有找到说的比较详细的,所以在我觉得自己弄明白以后写这篇博客来记录一下。一、当实现顺序队列的时候空出来第一位置比较好还是空出来最后一个位置比较好?答案:空出来第一个位置更好,顺序队列为了实现方便通常会空出来一个位置不使用,这样类似于rear=(rear+1)%capacity这种写法可以很容易实现,而空出来以后当front与rear相等的时候我们才可以判断出来队列为空,如果不留一个空位置,当这俩相等的时候可能满了也可能为空
2020-11-03 22:52:03
726
2
原创 总结一下递归与非递归的二分查找
首先介绍一下非递归的二分查找,肯定是要用一个循环了,比较注意的地方有一点就是循环的条件要记得带“=”号,一旦只是左边小于右边,那么那些当左右两边相等的时候算出来的点就会找不到,这挺好理解的不再多说,其他的就很简单没有什么特别的,下面是我的代码:int Binsearch(int a[], int n, int key){ int left = 0; int right = n - 1; while (left <= right){ int mid = (left + right) / 2;
2020-10-27 21:28:46
227
2
原创 我自己总结的一个mutex的数据竞争问题
刚开始接触互斥量,在做一个例子的时候碰到了一个问题,当我把互斥对象与共享数据放在类内的时候总是出现莫名其妙的问题,如下所示:mutex的默认拷贝构造函数本身就是禁用了的,不知道为什么放在类内就会去调用这个函数,即便不放在私有成员内部也不可以,下面我把它拿出去,出现下面的问题:一样这部分共享的数据,我即便不放在私有成员内部也是会出现同样的错误,我看到网上有很多人碰到了类似的问题,但是我都试过了还是没办法放在类内很好的实现,即便不出问题也是没办法按照想象的运行结果,唯一的稳定运行就是把它放到全局里边也就
2020-09-24 11:31:58
198
原创 Pmac与Laserdesk运行模式转换的时候发生的问题总结
项目中一开始在DebugX86模式下的时候可能有一些问题,然后师姐他们把运行模式换为了ReleaseX64,不光运行模式换了,运行环境也换为了64位。这样做其实系统会自动优化,运行起来可能会更流畅一些,但是准备把LaserDesk集合到程序当中的时候发现LaserDesk只支持在DebugX86模式下运行,但是突然转换产生了很多问题,因为时间过去了几天有一些问题我忘记了总结,现在把可以想起来的问题总结一下。第一:这是一个比较常见的问题,因为用到了sprintf与sscanf这两个函数,所以系统会报警觉得
2020-08-24 14:51:08
306
原创 在使用laser DESK远程控制以及PMAC控制卡中COM库调用问题
我之前写过一篇COM库调用的文章,但是现在看来说的并不算是详细,我今天打算好好总结一下我自己在项目中是如何一步步解决COM库的调用的。 第一:COM库我目前碰到了两种,一种是laser DESK的先给了一个.DLL文件,然后我们要用微软的程序集自己生成TLB文件,方法如下,其实网上有很多需要找到适合自己电脑版本的哪一款,我提供的方法仅供参考。另外一种是PMAC提供的一个exe文件,也是库文件但是不需要转化为TLB格式的。第二:当我们有了TLB格式或者EXE格式的COM...
2020-08-12 10:39:58
575
原创 C++COM库(tlb文件)调用方法详解
COM库现在运用很多最近项目用到让我头疼不已,现在问题解决跟大家说明一下。首先,COM库好像不能直接在控制台应用程序里边用,即便加了这句代码依然可能有未识别的标识符的问题出现,#import "D:\\Cjiajia\\MFCApplication7\\MFCApplication7\\SLLDRemoteControl.tlb" no_namespace,在写了这句代码以后如果编译还不通过可以在这行代码之前加上#import "mscorlib.tlb" no_namespace named_gu
2020-07-21 11:10:18
6656
2
原创 我自己总结的算法的时间复杂度与空间复杂度
算法的空间复杂度就是对于物理内存的使用量,平常循环的话占用的物理内存一直都是那么多,是不会发生变化的;而当涉及到函数调用或者其他什么调用的时候,需要不停分配内存,比如递归次数很多的时候空间复杂度是非常大的。算法的时间复杂度:我们要尽量让时间复杂度的上限小一点,下限大一点,这样算法的稳定性会更好。下面是各个时间复杂度的比较情况:N!是数量级最恐怖的一种,一个好的算法数量级绝对不可以到N!这种程度。...
2020-07-16 15:22:03
190
原创 我自己总结的如何调用抽象类内的函数接口
第一:通过类的指针无论是子类还是父类都可以调用抽象类内的正常函数接口,注意只能调用正常的,如果是虚函数接口是不可以调用的,下面是程序例子:像如图上所示当用指针访问抽象父类的正常函数的时候,程序是没有问题的。当这个函数我写成虚函数以后:所以说无法通过指针调用抽象类内的虚函数,会出现这个访问冲突问题。第二:可以通过子类来调用父类的函数接口,当然子类必须对父类的纯虚函数进行了定义来确保子类不是抽象类,要注意一点子类对父类的定义必须完全按照父类纯虚函数的返回值跟形参进行定义,否则子类仍然会被认为是抽象类,那
2020-07-16 11:12:24
2447
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人