- 博客(249)
- 资源 (7)
- 问答 (3)
- 收藏
- 关注
原创 CMakeList build提醒头文件找不到问题
摘要:本文介绍了CMake中处理头文件路径的常用方法。首先展示了include_directories的基本用法,然后提供了打印当前包含路径的调试技巧。文章重点讨论了多模块项目中常见的问题:当其他模块直接编译本模块源文件时,可能会因缺少头文件路径而导致错误。最后提到在模块间调用时,需要正确设置DLL导出符号(dllexport)。这些技巧有助于解决复杂的多模块项目构建问题。
2025-11-20 12:04:19
132
原创 C++ 浮点数比较相等写法
摘要:在C++中比较浮点数时,由于IEEE754表示法可能导致的精度问题,直接比较是不准确的。建议使用机器epsilon(std::numeric_limits<double>::epsilon())作为误差范围,通过计算两个浮点数差值的绝对值是否小于该阈值来判断是否相等。示例代码展示了如何正确比较两个浮点数a和b的值。
2025-11-13 17:57:35
96
原创 windbg dump文件分析方法
摘要:本文介绍如何使用Windbg分析程序崩溃产生的dump文件。首先确保dump依赖的dll文件存在,将dump拖入Windbg后执行!analyze -v命令分析崩溃点。通过调用栈可定位问题函数,配合反编译工具根据偏移地址找到崩溃位置。常见崩溃原因包括内存越界、空指针访问等,但复原数据状态分析具体异常原因较为困难。(148字)
2025-08-22 11:29:48
440
原创 使用伪代码清晰简洁的表示代码逻辑
本文介绍了编写清晰伪代码的核心原则和风格指南。伪代码应注重算法逻辑而非语法细节,关键要点包括:使用类代码结构但简化语法;明确变量赋值、输入输出和控制结构;规范函数定义和注释;统一数据结构访问和数学运算表示。文章通过二分查找、计算平均值等示例,展示了如何用标准化的伪代码格式描述算法流程,平衡代码结构与自然语言表达,确保逻辑清晰可读。伪代码的核心价值在于高效传达算法思想,不受具体编程语言限制。
2025-08-14 17:29:52
618
原创 Excel中如何在单元格中插入斜杠分割单元格
选择单元格:选择你想要插入斜线的单元格。设置边框:选择“设置单元格格式”,在弹出的对话框中,选择“边框”选项卡,在边框设置中,选择“对角线”按钮(上斜线或下斜线),然后点击“确定”。添加文字:双击该单元格开始编辑,使用 Alt + Enter 进行换行。输入第一行文字,例如“行标题”,然后按 Alt + Enter 换行到下一行。输入第二行文字,例如“列标题”。最后调整单元格中的文字位置,使其看起来更整齐。
2024-12-02 16:21:14
665
原创 我的创作纪念日
后来很长时间没有创作或者提问,直到工作后,进入NI研发做驱动,当时水平真的很差,很多同事轻松完成的工作,我加班也不一定能做好,因此下定决心把工作中的每个问题都弄清楚,把C++学好,从这段时间2019年开始大量写博客,编代码,是创作文章最多的时候。当前创作文章很少了,因为没有特别多的技术点要探索,投入生活中的时间更多了,后续发的文章可能会很少。
2024-04-15 17:32:56
315
原创 链表节点Node为结构体,内部包含前向和后向Node指针的结构体定义方式
【代码】链表节点Node为结构体,内部包含前向和后向Node指针的结构体定义方式。
2023-11-29 15:04:10
356
原创 C++实现内存池Memory Manager,并可以合并空闲内存空间
这个内存池的设计思想是使用链表(link list)来管理用户从内存池里开辟出的memory block,allocate操作从内存池中取出所需size的memory block,它不断从未使用的空间中通过指针偏移从已经分配的内存池中取内存,而无需直接使用malloc或者new。这个内存池的缺陷是无法整理不相邻的内存库,最后内存可能碎片化,这需要复杂的内存分配策略,例如最佳适配(best fit)、最差适配(worst fit)或伙伴系统(buddy system)。
2023-11-28 20:59:26
618
原创 std::thread传入类成员函数指针报错failed to specialize function template ‘unknown-type invoke
这里使用一个myclass实例c放入thread构造函数,以指定使用的函数指针是c所属。如果在类内部创建线程函数,并且函数指针是类成员函数指针,则需要传入this指针。
2023-09-22 11:04:58
434
原创 基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个
【代码】基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个。
2023-08-30 14:15:57
159
原创 fscanf_s()使用
对于fscanf_s()来说,只设置一个长度参数或者不指定长度参数,都可以通过,为每个数据都指定反而是错的,fscanf_s()不如fscanf()函数来的直接。测试文件data.txt。
2023-08-29 15:06:57
2198
原创 如何创建Google test shared library(dll)和static library(lib),并编写测试用例
在Windows下使用Visual Studio开发自测试代码,通常需要创建shared library(dll)和static library(lib)文件用于编译和链接,本文介绍如何从google test开源代码编译dll和lib文件,并创建一个简单的Gtest用例。
2023-08-08 12:00:59
904
原创 使用struct作为std::map的key值,并支持比较
有序map不光需要比较等于,还需要比较顺序,a,b,c不同的大小关系来排树形结构。一种方法是使用unorder map,只需要提供operator()重载。
2023-07-18 17:06:32
518
原创 C++类定义中声明和初始化static静态变量
在类头文件中声明public类型的static变量,在类的源文件中初始化,注意变量之前需要类作用域。
2023-01-17 10:04:16
441
原创 无法通过头文件中的宏定义或全局变量修改动态库中的参数
期望为用户提供的动态库,通过库的头文件定义的宏或者全局变量,修改动态库中执行逻辑时用到的参数,发现这条路不可行,一旦动态库已经生成,修改头文件中的宏定义或全局变量,不会修改动态库中的变量,这些变量仍然使用的生成动态库时定义的值。都已经确定,把这个头文件和dll提供给用户,用户修改了头文件中的宏或者全局变量定义,也不会生效,使用的值仍然是dll生成时所定义的。解决这个问题的方法是提供新的接口函数,用户调用这个函数以修改dll中的参数,和用传参的方式逻辑一样。一旦使用上述头文件生成了dll,...
2022-08-05 10:30:56
844
原创 创建一个基础WDM驱动,并使用MFC调用驱动
首先参考文章:如何使用WinDbg和Virtual Box进行Windows驱动debug,搭建开发环境。创建一个Empty WDM项目,在solution下添加一个MFC项目:其中FirstDriver是一个简单的WDM驱动项目,而App是一个MFC程序,用于调用驱动。Source.c是驱动源码:程序完成了几项工作:MFC应用程序界面:一共4个按钮,分别执行device open/close,以及通过IO发送和接收数据。需要注意的是,这里要使用DeviceIoControl函数用于和devi
2022-06-22 14:03:10
1220
1
原创 如何使用WinDbg和Virtual Box进行Windows驱动debug
WinDbg and Virtual Box kernel-debug.
2022-06-13 20:49:37
599
原创 C#调用C代码生成的DLL的DLLImport方式
C#代码需要调用C开发的动态库时,可以使用DLLImport的方式。通过来指定调用的dll及其路径,调用规范和entery point,通常这个新定义的函数和DLL中的函数同名,如果遇到传入数组形式如double *,C#使用double[]代替,如果传入指针类型用于返回参数,如point to int,则在C#中使用ref int形式。有时代码会报出"Entry Point not found"错误,这可能是DLL生成时没有extern C造成。
2022-06-02 15:32:24
1081
原创 创建动态链接库,头文件报错expected initializer before “function name“
extern "C" MATHLIBRARY_API void _cdecl fibonacci_init( const unsigned long long a, const unsigned long long b);头文件这个函数前报出expected initializer before “fibonacci_init”,这是由于函数前的_cdecl造成,只有一个下划线的cdecl和两个下划线的__cdecl是同义词,但是某些配置下,它们不一样:为了与以前的版本兼容, cdecl 和
2022-04-21 22:05:39
3084
原创 C++多线程的使用,返回值和加锁
使用C++多线程可以进行并行计算,提高执行速率。在创建thread对象时,要注意如果返回参数是引用类型,如果不使用std::ref前缀,会发生:Error C2672 'std::invoke': no matching overloaded function found;Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&.
2022-04-13 17:43:09
1919
1
原创 如何使用开源FFTW库进行FFT和逆FFT运算
首先下载FFTW3库,在Windows平台上使用Developer Command Prompt工具生成静态库.lib文件。创建VC测试项目,将库中提供的libfftw3-3.dll和fftw3.h,以及生成的libfftw3-3.lib放在测试项目中,配置好include path和link path/item。// FFT_CPP_Test.cpp : This file contains the 'main' function. Program execution begins and end.
2022-04-11 17:03:25
3369
2
原创 以循环中index作为名称创建文件并保存数据
for (int i - 0; i < 10; ++i) { char filePath[100] = "./"; char index[1] = { 0 }; sprintf(index, "%d", i); strcat(filePath, index); strcat(filePath, ".txt"); ofstream f(filePath); f << data << endl;}
2022-03-18 18:18:42
438
原创 Visual Studio创建动态链接库时,接口报出dllexport/dllimport requires external linkage
headerextern C LIB_EXPORTS_API void _cdecl func()sourcestatic void func()此时func会报出dllexport/dllimport requires external linkage错误,并且最终生成的只有dll文件,没有lib文件。解决方案是删除source中函数声明之前的static关键词。reference:https://stackoverflow.com/questions/9458595/export-fun
2022-03-18 09:31:12
822
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅