![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
秋月的私语
これは何(なん)のものですか?
展开
-
将局部变量指针传递给某个c++类,离开类时数据发生变化
我开始很奇怪为何会发生这样的事情,后来经过调试,发现原来是该类发生了异常,而异常会导致内存的值不再可靠,也就是本来该维持不变的值也被异常修改了,谨此纪念,以免下次遇到这类问题时又没有头绪。如果类里面的函数没有异常,这个结构体指针指向的内容不会发生任何变化,但是如果类异常了,但是没有中断,此时这个结构体的指针指向的内容异常,并且这个结构体无法正常访问。如上图所示,传递了一个结构体指针给类的成员函数,这个结构体已经是初始化过了的,并且在类的内部并没有对其进行修改。具体来说一下这个例子。原创 2024-05-31 17:17:00 · 182 阅读 · 0 评论 -
error LNK2038: 检测到“boost_log_abi”的不匹配项
最近项目上遇到了这个问题,看提示和查阅资料知道是boost版本不匹配的问题,但是项目原因换boost版本不太现实,一时竟然不知道怎么解决。在某个具体的cpp文件中,引用boost_log相关的头文件时,放到引用其他头文件的前面。对于boost_log相关的代码,引用其头文件时,放到最前。虽然还没有搞清楚为何这样可以解决问题,但至少避免了冲突。》这篇文章,感觉是类似的问题,供参考。后来在同事的提示下,,于是编译顺利通过!原创 2024-05-27 08:48:00 · 156 阅读 · 0 评论 -
识别剪贴板的内容并且添加磁力头
有时候复制的磁力链接并没有开头,而只有后面的内容,这个时候就必须给磁力链接添加开头下载软件才能识别,如果经常需要这么做比较麻烦,于是我写了一个自动添加磁力头的小软件,运行即可自动添加,减少操作步骤。原创 2024-05-25 08:40:52 · 183 阅读 · 0 评论 -
音视频按照时长分类小工具
即可实现,移动到指定目录,上述代码还实现了同名srt等移动到相同目录,这也是因为用户的需求。应某用户的需求,编写了这款根据音视频时长分类小工具。原创 2024-03-09 13:08:53 · 546 阅读 · 0 评论 -
Java接收curl发出的中文请求无法解析
最近做项目遇到了这种情况,英文请求一切正常,中文请求则对方服务器无法解析,可以猜测是中文导致的编码问题,但是奇怪的是,本地输出json也没有乱码,编解码正常,尝试转换成utf-8问题依旧,依然是本地正常输出无乱码,对方服务器无法解析。后来经过分析,发现本地客户端的程序,默认采用了Unicode编码,而Unicode实际上不等价于utf-8,网上查阅了资料说utf-8是Unicode的一种具体实现。我尝试用Unicode转utf8,结果正常了!原创 2024-01-25 11:07:32 · 612 阅读 · 0 评论 -
c++输出简单日志带日期时间功能
最近项目需要简单输出日志,用巨大的日志类未免繁琐,于是写了这个简单的日志函数,带日期,MFC下可以直接使用。原创 2023-12-21 10:58:14 · 574 阅读 · 0 评论 -
c++基于CImage实现图片格式转换完整源代码
最近遇到项目需要,对图片进行格式转换,抱着怎么简单怎么做的想法,于是进行了验证,代码参考自网络,进行了简单的修改。亲测有效,欢迎交流与讨论。我这里提供完整的代码。原创 2023-11-15 17:51:20 · 489 阅读 · 0 评论 -
使用c++解压rar文件,基于UnRAR64,非命令行
最近项目需要解压缩rar文件,我们都知道rar是闭源收费软件,如果直接采用命令行可能会有限制,或者盗版问题,使用正版的winrar命令行解压rar文件是否有限制,这个我没来得及测试,但是从交互体验上来说,命令行对于很多情况的处理也不太友好,比如是否出错,比如异常处理,甚至某些高级功能,比如自定义解压缩的文件名等等,这些在命令行中不太好实现甚至无法实现。原创 2023-11-07 18:11:01 · 744 阅读 · 0 评论 -
c++获取和设置环境变量
这个功能非常常用,但是容易忘记,这里做个记录。注意,设置的环境变量只在当前进程中生效,所以在电脑中的环境变量设置区域看不到。原创 2023-11-03 18:00:52 · 775 阅读 · 0 评论 -
jsoncpp fatal error C1083: 无法打开编译器生成的文件
jsoncpp在Debug模式下正常,但是release却报错,开始以为是开发项目设置问题,于是网络搜索,发现是jsoncpp的编译选项问题。修改生成静态库文件的工程的属性:路径为:菜单---项目--属性---配置属性---c/c++---输出文件---汇编程序输出:无列表。lib_json项目中汇编程序输出原配置为:带源代码的程序集(/FAs),改为:无列表生成即可。还有,改成这个无列表到底产生了什么影响呢,仅仅是无汇编程序输出吗,也不得而知。那我就奇怪了,为什么不把这个选项直接改成这个呢?原创 2023-11-01 13:04:24 · 300 阅读 · 0 评论 -
LoadLibraryEx调用dll时有未经处理的异常,发生访问冲突
最近做一个测试,使用LoadLibraryEx的方式动态调用dll,可以调用成功,也可以断点调试,但是一旦添加std::wstring类或者其他复杂一点的类,就报错,如上图所示。后来尝试了各种更改选项和设置,都没有结果,于是改用lib的方式调用dll,最终成功,并且发现这个dll其实依赖了很多其他的dll,初期觉得这可能是调用不成功的原因。目前暂用的解决办法就是使用lib方式的调用,问题临时解决,如果你正好也遇到了这个问题,不妨尝试一下用lib的方式调用dll。报错位置,如上图所示。原创 2023-09-28 09:28:38 · 418 阅读 · 0 评论 -
今天七夕,群友让我帮忙给他分配一个对象,于是我。。。
今天七夕,群友让我帮忙给他分配一个对象,于是我。。。原创 2023-08-22 12:01:37 · 135 阅读 · 0 评论 -
如何在代码中用宏定义确定VS编译器版本
只有在VS2015或者以上的版本中,中间的代码才生效,那么实际上我们可能需要对很多不同的版本进行判断,于是下方我整理了我们常常需要判断的VS的编译器版本。原创 2023-07-25 15:20:07 · 681 阅读 · 0 评论 -
同一段模板代码vs2008无法编译而10以及以上可以正确编译
今天无意间发现一段模板代码,vs2008无法正确展开,而2010以及以上可以正确展开,这里之所以说展开是因为这段模板本身并没有问题,但是如果调用模板“不合适”,则vs2008无法正确展开模板,而10以及以上没问题。直接上代码(已经去掉无关代码),展开失败的原因是因为指针匹配失败,猜测是老编译器对于指针的模板匹配偏弱造成的,解决方法我在注释中著名了,针对老编译器不处理即可,确实需要可以自行编写,而不要使用模板展开。下面是vs2010的正确编译截图,同一个代码文件,没有任何修改。原创 2023-07-24 16:20:14 · 57 阅读 · 0 评论 -
vs编译生成事件预先生成事件和后期生成事件
vs的很多自动化功能真的很贴心,比如我们编译的对象,编译完需要自动拷贝到指定目录,其实这个功能各个vs的版本都有,而且使用方法相同,用好了可以大量节约调试代码事件。xcopy命令有更多复杂的参数,当然我们用得比较多的就是/y /d 这两个字母组个词就能记住了(比如,我用“优点”记住了这两个参数)。这里命令行还可以使用$符号,实现通配路径功能。还比如我图中并没有使用通配符也是可以的。原创 2023-07-20 11:34:42 · 492 阅读 · 0 评论 -
调试遇到还未进入函数就异常的问题
这个问题一般不会遇到,因为参数不能转换的时候,编译就会出错,而在这个案例当中,参数明明无法转换,但是因为这个参数是自定义类型(可能还是比较特别的自定义类型,对我不可见,所以我也无法查看内部情况),编译器也没能提示类型不同无法转换,导致运行时转换失败,从而引发了异常。由于默认参数的存在,实际上第二个参数我写错了,应该是ivecUserZ,我忘了写,所以默认就把第二个参数 false尝试转换,而实际转换失败,导致了这个异常!后来经过逐行排查,发现原来是参数转换的问题!当作一个纪念吧,让自己印象深刻一点。原创 2023-07-07 10:00:48 · 115 阅读 · 0 评论 -
对于float或者double的集合求解交集
对于一般的集合求解交集,我们直接使用std::set_intersection即可,但是float和double都有精度问题,如果直接求交集,会认为比如0.9999和1.0001是两个数,造成并没有真正取得交集,其实这个函数实现也很容易,那么我在这里分享其模板的实现。原创 2023-07-05 17:10:17 · 110 阅读 · 0 评论 -
批量打开多个网页小工具处理特殊字符
,看后台下载有不少网友下载了,但是在最近的使用过程中,我发现一个问题,如果网址中包含特殊字符“&”,则网址无法正常打开,调试了一下发现,原来system命令无法直接处理带有&符号的网址,尝试将网址进行常规的网址转义,类似下方。但命令行仍然无法处理,最后经过苦心搜索,终于找到答案,在这里直接贴出代码,需要成品的可以直接在文章末尾下载。之前写过一个小工具,名字叫《原创 2023-06-16 09:14:26 · 181 阅读 · 0 评论 -
c++中vector初始化的一个有趣的细节问题
从结果中可以看到,两种初始化方式的结果是不同的,第一种初始化方式,vecor容器中存储的指针是相同的,也就是说,new vector这句话实际上只执行了一次,而第二种初始化方式才是我们需要的,分别对每一个指针进行初始化。虽然写c++很多年了,一直没有注意到这个细节,说来惭愧,不过最近在做项目的过程中发现了这个问题,特此纪念一下。代码1和代码2,同样初始化了一个vector,但是他们初始化的方法有区别,现在的问题是,他们的效果相同吗?那么,想问一下,这两段代码的效果是一样的吗?先不看答案,思考一下呗。原创 2023-05-08 12:01:03 · 415 阅读 · 1 评论 -
如何再次弹出“无法找到调试信息 或者调试信息不匹配”对话框
最近在调试某dll的时候,因为dll才是包含调试信息的,exe不包含调试信息,弹出该警告对话框,于是勾选了不再显示该窗口。百度无果,后来自己研究了一下,发现可以在这个选项下,勾上勾选,即可再次在必要的时候弹出该警告对话框。然而,后来我又希望能够在需要的时候再次弹出该警告对话框。这个需求比较小众,如果你正好碰到了这个问题,可以参考一下。经过测试,重新弹出对话框。原创 2023-04-28 15:11:24 · 753 阅读 · 0 评论 -
c++中set_difference这个函数的意义和用法
今天正好碰到了这个函数,虽然一眼就可以看出这个函数的作用,但是仍然期待一个通俗易懂的解释,网上搜索了一下,搜到百度百科,感觉没有抓住重点,虽然示例也勉强可以理解,但是总感觉讲究不够直观。是C++中的一个函数,它接受两个有序的范围作为输入,并输出在第一个范围中但不在第二个范围中的元素。输出写入到一个第三个范围中,该范围必须足够大以容纳所有输出的元素。于是,最终在Notion的帮助下,我得到了以下回答,我觉得这个讲解很棒,而且示例中很贴心第改变了输出数组的大小。中,并且该函数返回指向输出范围结尾的迭代器。原创 2023-04-27 18:01:58 · 2593 阅读 · 0 评论 -
static_cast、dynamic_cast和reinterpret_cast区别和联系
在这些情况下,强制转换可能会导致未定义的行为,例如访问无效的内存位置或引发段错误。因此,应避免在这些情况下使用强制转换,而应使用。其实网上相关的资料不少,但是能够说清楚明白这个问题的也不多。,或者重新设计应用程序以避免需要进行此类转换。是更安全和更灵活的执行类型转换的方式,而。让我们先看看AI是怎么回答这个问题的。应该只在必要时使用。原创 2023-04-25 13:16:34 · 516 阅读 · 0 评论 -
简易小工具实现批量打开多个网页
但是我实测,发现一个问题,就是当打开超过大约3个网址的时候,有可能调用失败,而尤其是当打开的是相同的网址,则即时你一次性只打开两个网址(相同),也会大概率被判定成一次调用,我猜想可能是调用函数进行了一定的去重处理。如果是相同的网页进行去重处理倒也没问题,但是不同的网址,也会有极大概率打开失败,这 自然是我不想看到的,经过测试,发现加入一定的延时处理,即可正常调用,目前实测8个网页一次性打开也没问题。于是我自己编写了一个小工具,实现一次性打开多个网页。关键代码为1个for循环,每三次调用加入延时。原创 2023-04-06 14:41:04 · 2613 阅读 · 2 评论 -
移动目录包含子目录的跨平台c++实现
于是我接着让AI帮忙写一段在Win下将文件删除到回收站的代码,这段代码倒也可以正常运行,但是无奈并没有实现功能,总是删除失败!这个需求的代码其实之前分享过,但是当时主要用在Win下,所以也没有做过多的测试。而且代码写得非常规范,几秒钟出答案,可以吊打一众低端程序员了。下面是我从另外的资料里查到的,亲测有效的将文件和目录删除到回收站的代码。我也看不出来哪里有问题,不过经过对比有效代码,可以猜想是参数问题。合理利用AI的话,还是能节省不少时间的!最近正在玩AI,发现AI写代码还真的是蛮厉害的。原创 2023-03-31 16:20:34 · 157 阅读 · 2 评论 -
c++11中一个有用的LOG宏范例
这样做的好处显而易见,可以更方便的定义宏函数,比如上述LOG函数,实际工作中对于轻量级的调试,帮助很大,可以快速定位。其中__VA_ARGS__代表了不定参数。原创 2023-03-29 14:59:20 · 236 阅读 · 0 评论 -
UG/NX二次开发实例流程样例(nx1980+vs2019)
以上就是基本操作了,下面进入界面开发流程,nx1980的界面开发操作,也需要在块UI界面编辑器中操作,很多教程都没有讲解这一点,尤其是如何进入块UI界面编辑器,那么我在这里详细说明一下步骤。》,这一篇文章我们将详细讲述,如何开发一个具体的功能——根据用户输入的数据,在特定的点上创建一个指定大小的立方体。可以将文件保存当桌面,笔者保存在桌面的create_block目录中了,如下图所示,可以发现生成了三个文件。4.在新建模型完成后,我们准备创建交互UI,按照下图所示的顺序,找到块UI界面编辑器,。原创 2023-03-27 14:15:17 · 6349 阅读 · 7 评论 -
UG/NX二次开发环境配置方法(nx1980+vs2019)
看到网上关于此类入门的教程并不算多,而且vs和nx版本各异,有不少是作者个人笔记,描述不够详尽,我在实测的过程中发现了一些描述不清的问题,对于入门者来说很不友好,于是我打算写这篇文章,方便想入门的读者,我尽量详细描述操作方法与注意事项,方面入门者一步一步操作。最近需要尝试nx二次开发,结合网上的文字教程以及一些视频教程,总算是完成了环境的配置以及简单实例的运行——根据用户输入的数据,在特定的点上创建一个指定长宽高的立方体,配合了简单的UI界面,完成了基本功能。,变量值设为刚刚新建的那个文件夹,我这里是。原创 2023-03-27 11:04:06 · 4181 阅读 · 0 评论 -
对1亿个int数据进行排序和去重的c++代码实现
具体思路就是,每一个unsigned char类型占8位,那么每个位即可代表一个数据,这样的话,就算是1e8个数据,实际占用内存也只需要1e8/8个字节即可。因为数据量比较大,如果采用常规的办法,虽然也可以实现,但是效率会比较低,或者内存占用比较大,这里提出一个解决方案,使用字节中的位来标记,占用内存小,速度快。原创 2023-03-24 14:12:09 · 223 阅读 · 0 评论 -
获取目录结构输出到文本小工具
最近整理电脑里的资料,因为目录嵌套特别多,需要对目录进行整理注释,但是又希望保持目录结构,输出如下效果的文本,使得目录结构清晰,方便后续的进一步整理说明。于是我撰写了这个小工具,可以获取目录结构,可以选择枚举深度,默认枚举所有目录。小工具暂时没有公开下载,有需要的同学请私信我取得联系,欢迎交流与讨论。这样整理了之后,就可以进一步整理成excel表格了。原创 2023-03-23 11:52:18 · 215 阅读 · 0 评论 -
Qt属性系统Q_PROPERTY的通俗解释
我们可以简单理解为QT巧妙地实现了反射机制,因为c++本身是不支持反射的,但是QT这么做似乎就实现了反射,为什么说是似乎呢,因为我理解的反射机制,应该还包含对于函数的调用,甚至是更复杂的调用,而目前的例子,似乎只是调用了属性,也就是修改部分变量的值,而没有能够实现调用内部对象函数的方法。比如上面的QSize,当然,我们可以通过约定的方式,比如把参数类型放在名称当中,但是这显然不是我想要的答案,我希望有更明确的方法来获取参数类型,而不是通过曲线救国。其他属性的设置,方法是类似的。原创 2023-03-17 15:43:07 · 1612 阅读 · 2 评论 -
visual studio2019错误MSB3073命令“setlocal
最后看到某文章标题《VS 编译CMake生成项目 命令setlocal报错(error MSB3073)》,才想起这个工程是基于CMake的,于是突然想起恢复了系统之后,CMake也没了。最近恢复了Win系统,重新编译某个项目的时候,出现了这个错误,因为项目是以前备份的,所以可以断定不是项目文件本身的问题,而只可能是环境变化造成的。在网上搜索了一通,有说什么配置路径不对的,有说是生成事件参数配置问题的等等,但我都可以排除这些问题。所以一开始才没能发现问题。以上,仅供分享与参考。原创 2023-03-13 11:10:35 · 5311 阅读 · 0 评论 -
c++实现移动文件和目录带恢复功能
,最近正好又需要这样的功能,而且还增加了一个需求,希望能够记录移动的具体内容,并且能够根据记录实现恢复功能,这个实现起来没什么难度,唯一需要注意的是,记录需要加锁,并且考虑到程序崩溃等问题,需要将每次成功或者失败记录即时写入文件,而不能在程序结束时写入,否则程序一旦崩溃,所有的移动记录将丢失。于是我写了一个类,实现了文件和目录的移动,纯c++实现,可以记录移动过程,也有恢复功能呢,可以指定记录的文件名,默认为"restore.log"。注意,部分函数需要另外实现,实现起来也不难,欢迎交流与讨论。原创 2023-02-24 15:24:40 · 788 阅读 · 0 评论 -
两道关于虚函数的c++面试题
这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。通过这个示例,我们可以看到,我们可以通过强行把&b转成int*,取得虚函数表的地址,然后,再次取址就可以得到第一个虚函数的地址了,也就是Base::f(),这在上面的程序中得到了验证(把int* 强制转成了函数指针)。=====================我是华丽的分割线==================原创 2023-02-08 09:33:00 · 591 阅读 · 0 评论 -
批量双层压缩小工具7z格式增强版
之前写过一款《批量双重压缩小工具7z格式优化版》,很多网友表示这款工具很实用,于是我这次给这款软件进一步增强了其功能。软件成品暂未公开,但关键源代码已经提供了,可以参考一下,自行实现功能即可。1.现在不仅可以支持目录的双层压缩,同时也支持了文件的双层压缩。2.不仅支持双层压缩,还支持了单层压缩,去掉第二层的勾选即可。软件的使用方法跟之前没有区别,拖拽文件或者目录到列表即可。想要全套源代码的,也可以私信我取得联系,一起学习交流。如果仅仅需要软件成品的,可以私信我取得联系。生成的文件即可实现加密压缩功能。原创 2023-02-06 12:02:32 · 2136 阅读 · 1 评论 -
批量双重压缩小工具7z格式优化版
于是,按照某站长的需求,我撰写了一个双层压缩的软件,在一定程度上可以缓解和谐问题,尤其是对于站长之类的,这款软件还是有一定意义的,实际上这款软件之前也发布过关键源代码,这里再次分享一下关键源代码,这次的代码稍微有所优化,主要是考虑到了,双层压缩的时候,实际上第二层压缩已经没有必要使用极限压缩了,而采用存储(-mx9)的方式,这样可以大幅度减少等待时间。软件成品暂未公开,源代码已经提供了,可以参考一下,自行实现功能即可,如果需要软件成品的,可以私信我取得联系。原创 2023-01-06 15:01:51 · 731 阅读 · 0 评论 -
解决VS2019+Qt5+Vcpkg工程无法调试但Release正常运行的问题
你当然可以沿着这个问题继续往下解决,但是我发现此时已经陷入死胡同,我只不过是想对新写的代码进行调试,其实对于qt部分使用debug或者release的库,我并不关心,而且因为我注意到release版本的程序正常运行,于是我进行了一个特别的尝试。即便找到了对应的 icudtd69.dll,加入到exe目录,再次windeployqt,错误依旧,此时我们得换一个思路了,编译Release版本,然后寻找对应的dll。接下来,尝试调试,为了看到调试效果,写了几行冗余代码,并且可以看到调试信息。至此,问题得到解决!原创 2023-01-03 11:20:05 · 2176 阅读 · 0 评论 -
重复命令小工具附带关键源代码
最近需要测试一个小程序的稳定性,具体表现为该程序单次运行没问题,但是运行几千次之后会报错,因为调用此程序的项目程序较大,不方便测试,于是专门写了一个小程序,用于反复执行exe,测试其稳定性。基本的【命令】,支持 exe,bat等可执行文件拖拽,【参数】可选,【环境】为需要添加的环境变量,【次数】为需要执行的次数。关键代码如下:欢迎交流与讨论。原创 2022-12-06 14:37:12 · 291 阅读 · 0 评论 -
MFC初始化时调整对话框窗口大小和位置
【代码】MFC初始化时调整对话框窗口大小和位置。原创 2022-10-31 13:34:25 · 2587 阅读 · 0 评论 -
如何获取Ribbon中某个Edit控件的值
如图所示的Edit空间,索引依次为1,1,4以及1,1,5,于是得到代码。使用MFC中的Ribbon界面时,有时候需要获取某个Edit中的值。注意获取的先后顺序,如下图所示,我们按照123的顺序依次获取。注意,其中1的索引是从1开始的 ,而其他的索引是从0开始的。这个函数可以放到MainFrame.cpp中实现。下面是声明位置,供参考。原创 2022-10-28 15:31:28 · 369 阅读 · 0 评论 -
VS2019 对COM组件的调用返回了错误HRESULT E_FAIL
网上可以随意搜索到解决办法,但是每次操作起来比较麻烦,于是整理了一个批处理。安装vs2019结束后,直接打开工程,报这个错误。命名为“fixHResultEFail.bat”关闭窗口,重启vs2019,问题解决。(vs2019开发人员命令提示符)原创 2022-09-22 14:38:36 · 720 阅读 · 2 评论