- 博客(240)
- 资源 (7)
- 问答 (3)
- 收藏
- 关注
原创 我的创作纪念日
后来很长时间没有创作或者提问,直到工作后,进入NI研发做驱动,当时水平真的很差,很多同事轻松完成的工作,我加班也不一定能做好,因此下定决心把工作中的每个问题都弄清楚,把C++学好,从这段时间2019年开始大量写博客,编代码,是创作文章最多的时候。当前创作文章很少了,因为没有特别多的技术点要探索,投入生活中的时间更多了,后续发的文章可能会很少。
2024-04-15 17:32:56 270
原创 链表节点Node为结构体,内部包含前向和后向Node指针的结构体定义方式
【代码】链表节点Node为结构体,内部包含前向和后向Node指针的结构体定义方式。
2023-11-29 15:04:10 192
原创 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 263
原创 std::thread传入类成员函数指针报错failed to specialize function template ‘unknown-type invoke
这里使用一个myclass实例c放入thread构造函数,以指定使用的函数指针是c所属。如果在类内部创建线程函数,并且函数指针是类成员函数指针,则需要传入this指针。
2023-09-22 11:04:58 278
原创 基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个
【代码】基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个。
2023-08-30 14:15:57 108
原创 fscanf_s()使用
对于fscanf_s()来说,只设置一个长度参数或者不指定长度参数,都可以通过,为每个数据都指定反而是错的,fscanf_s()不如fscanf()函数来的直接。测试文件data.txt。
2023-08-29 15:06:57 1597
原创 如何创建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 687
原创 使用struct作为std::map的key值,并支持比较
有序map不光需要比较等于,还需要比较顺序,a,b,c不同的大小关系来排树形结构。一种方法是使用unorder map,只需要提供operator()重载。
2023-07-18 17:06:32 425
原创 C++类定义中声明和初始化static静态变量
在类头文件中声明public类型的static变量,在类的源文件中初始化,注意变量之前需要类作用域。
2023-01-17 10:04:16 368 1
原创 无法通过头文件中的宏定义或全局变量修改动态库中的参数
期望为用户提供的动态库,通过库的头文件定义的宏或者全局变量,修改动态库中执行逻辑时用到的参数,发现这条路不可行,一旦动态库已经生成,修改头文件中的宏定义或全局变量,不会修改动态库中的变量,这些变量仍然使用的生成动态库时定义的值。都已经确定,把这个头文件和dll提供给用户,用户修改了头文件中的宏或者全局变量定义,也不会生效,使用的值仍然是dll生成时所定义的。解决这个问题的方法是提供新的接口函数,用户调用这个函数以修改dll中的参数,和用传参的方式逻辑一样。一旦使用上述头文件生成了dll,...
2022-08-05 10:30:56 634
原创 创建一个基础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 979 1
原创 如何使用WinDbg和Virtual Box进行Windows驱动debug
WinDbg and Virtual Box kernel-debug.
2022-06-13 20:49:37 419
原创 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 886
原创 创建动态链接库,头文件报错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 2940
原创 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 1812 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 2910 1
原创 以循环中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 376
原创 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 611
原创 Visual Studio项目中,相对路径的表示
在VS Project中,有时为了能够使用相对路径读取当前项目路径下的文件,可以使用相对路径,有两种方式表示:使用单个点.来表示当前project path。例如在test.vcxproj同级目录有存在一个test.txt文件,则程序中表达它路径的方式为:const char *filePath = "./test.txt";使用两个点..来表示project path的上级目录。例如test.vcxproj的上级目录存在一个test.txt文件,则程序中表达它路径的方式为:const char *f
2022-02-23 20:14:23 4154
原创 C#全局变量的定义和使用
在C#程序中,为了在不同的作用域(cs文件或Form界面)之间传递数据,可以使用public static对象来定义全局变量:GlobalVarAndFunc.cspublic static class GlobalVarAndFunc{ public static string testString = "abc"; public static int Add(int a, int b) { return a + b; }}Main.cs class
2022-02-23 19:23:46 17878
转载 Visual Studio编译是提示:Unresolved external symbol _sprintf and _sscanf
这个问题的解决方法是:https://stackoverflow.com/questions/32418766/c-unresolved-external-symbol-sprintf-and-sscanf-in-visual-studio-2015在项目属性->链接器->输入->Additional Dependencies添加legacy_stdio_definitions.lib在使用这些函数的源文件中加入#pragma comment (lib, "legacy_stdio_
2021-12-10 17:02:01 586
原创 MFC设置鼠标为忙碌状态
有时程序执行某个过程很耗时,为了提示用户程序处于忙碌状态,可以将鼠标设置为转圈的忙碌状态:{ CWaitCursor wait; // display wait cursor. 设置为忙碌模式 // do some lengthy processing Sleep(1000); AfxMessageBox(_T("Process Complete")); //This changes the cursor. wait.Restore(); //Restore the Wait cursor.
2021-12-09 17:32:09 930
原创 C/C++如何使用_DEBUG宏来帮助进行调试
在调试过程需要显示更多的调试信息,而release模式下不需要,这时使用_DEBUG宏来进行状态切换很方便:#ifdef _DEBUG printf("Debug value: %f\n", value);#endif这段打印代码只会在debug模式下执行。
2021-12-09 17:22:28 1056
原创 如何从MFC的Editor Control控件中读取字符数组和浮点数
CString SampleRateStr; // 用于接收editor controlneirong的CSringGetDlgItemText(CYVSTSampleRateCtl, SampleRateStr); // 将editor control内容输入CStringdouble sampleRateValue = _ttof(SampleRateStr); // 将CString转换为浮点数CString WaveformNameStr;GetDlgItemText(CYVSTIMWav
2021-12-09 09:47:23 1249
转载 C语言记录执行时间
#include <stdio.h>#include <time.h>int main () { time_t start_t, end_t; double diff_t; printf("Starting of the program...\n"); time(&start_t); printf("Sleeping for 5 seconds...\n"); sleep(5); time(&end_t);
2021-12-07 18:56:19 1098
原创 在Visual Stuio项目属性中使用相对路径进行配置
如果需要在项目属性中配置Additional Library Directories这类属性,使用绝对路径会导致切换开发环境后无法编译,使用相对路径可以解决问题。使用“…\” :这种方式是相对于Visual Studio的安装目录开始C:\Program Files (x86)\Microsoft Visual Studio\2017,通过继续“…\”来向上级目录定位。使用“$(ProjectDir)”或者“$(SolutionDir)”这种方式,从VS Project或者VS Solution路径开
2021-12-06 21:34:46 679
原创 在使用Visual Stduio创建一个动态库时,报出C2065 ‘identifier‘ : undeclared identifier错误
这个错误很奇怪,在创建一个console项目时,编译并不会报出C2065这个问题,编译时可以找到声明,但改成动态库项目后就会报C2065。这是由于动态库程序一定要把“pch.h”这个头文件放在include的第一行:#include "pch.h"#include <stdio.h>#include <stdlib.h>#include <string.h>如果将pch.h这个头文件include在其他头文件之后,就会出现找不到声明的问题。...
2021-12-04 17:14:54 1032
TA创建的收藏夹 TA关注的收藏夹
TA关注的人