C++
文章平均质量分 64
C++
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CString用于构造函数参数的坑
我有时候需要某个模块来处理数据,喜欢直接在构造函数里调用这个类内的方法完成计算,使用的时候直接一个临时构造就完事,不用再构造完以后调用个方法再运行。看着三种调用构造都没啥毛病,但是第一种直接构造临时变量时候就会报错。结果写了几十年代码了。今天突然遇到了这种情况。原创 2023-05-21 08:34:11 · 268 阅读 · 0 评论 -
windows VC++获取磁盘名称和序列号
DWORD VolumeSerialNumber;//磁盘序列号CString VolumeName;//磁盘名称GetVolumeInformation(_T("F:\\"), VolumeName.GetBuffer(200), 200, &VolumeSerialNumber, NULL, NULL, NULL, NULL);通过windowapiGetVolumeInformation就行原创 2021-10-19 14:57:50 · 1282 阅读 · 0 评论 -
char与wchar_t字符串
C++里的字符串类型是比较二的,因为有太多表示方法:char*、string、字符串数组、wchar_t*、wstring,今天就来缕一缕这些玩意。char*char* 貌似是C++字符串最基础最核心的。看以下四个字符串声明及输出结果:先说说核心,C里面的字符串就是一连串内存,以内存为0的字节作为结尾。来分析一下代码,其中str1、str3、str4是一个东西(str3区别只是内存在堆上),str2是字面值常量,str5是单纯的字符数组。 常规字符串 对于str1、.原创 2021-10-10 16:20:24 · 2071 阅读 · 0 评论 -
读懂指针与内存
C和C++最强大的地方在哪里呢?就是指针对内存的操作。有了指针,我们才可以在代码内存里自由飞翔,想玩哪里玩哪里,想变什么变什么。内存首先我们聊聊什么是内存(我们以32位程序模型为例)。对于一个进程来说,内存可以理解成一连串的带编号的存储区域。每个进程都映射一段连续的虚拟内存地址(不是内存的真实物理地址,只是一个编号,物理内存地址可以不连续)。每个格子我们理解为一个字节,也就是一个byte或者说一个unsignedchar。而指针其实就是一个数字,记录的就是内存...原创 2021-10-10 16:15:40 · 324 阅读 · 0 评论 -
Windows下编译CMake源码(Opencv源码编译)
有兴趣可以关注我公众号:原创 2021-05-09 08:43:39 · 193 阅读 · 1 评论 -
C++调用其他语言(C#、java、python)
完整的调用代码见文章末尾。 调用C#1.写一个如下的C#类库 2.将生成的Add.dll放入c++程序的exe生成目录同级(运行时使用,这样放就不用把dll放入环境变量或系统目录了) 3.再将生成的Add.dll放入项目文件目录(放这里是为了方便代码引用,就不需要配置引用目录或代码中写引用全路径了) 4.设置项目属性为clr...原创 2018-03-25 20:06:26 · 2186 阅读 · 0 评论 -
c++ uf8字符串与Unicode字符串之间转换
简单明了点,就这个类解决问题class Unicode_UTF8{ int cU8xU(wchar_t* pOut, char *pText) { char* uchar = (char *)pOut; unsigned char cIn = (unsigned char)pText[0]; if (cIn<0...转载 2018-08-02 21:33:55 · 1273 阅读 · 0 评论 -
c++ stl模糊查找【找到key对应的值,找不到时返回最接近key的两个值】
在数据查找时如果找不到可以对应的值,有时候我们需要找距离key最近的值,可以利用upper_bound函数进行查找如下两个函数GetMapInterVal和GetInterVal用于map版和其他线性容器 #include <map>#include <vector>#include <algorithm>using namespace...原创 2017-12-30 11:54:18 · 3638 阅读 · 0 评论 -
c语言编写面向对象的类
c语言虽然没有类,但是有结构体,合理运用结构体,虽然有些繁琐,但是也可以实现面向对象。 封装结构体的指针变量可以用来关联函数,这样就可以实现封装性。下面实例中就能体现这一点(这个也能体现this指针的作用)C就是指针一堆堆的,这里就不判空了。。。 定义一个包含成员变量和操作函数的结构体typedef struct ST ST;typedef void...原创 2017-01-09 20:19:49 · 385 阅读 · 0 评论 -
c++的异常机制
异常这玩意在函数调用层次深,模块多,出现异常立刻跳出,在最外层处理的情况下很好用。可以让代码变得更整洁。 当throw出现时,程序会直接跳转到catch处(一直向函数上层搜索catch块,如果没有catch则直接崩溃) try { throw **;}catch (**){} 程序在执行时,可以理解为先调用throw函数,throw函数调用catch函数...原创 2016-12-11 10:36:05 · 368 阅读 · 0 评论 -
VC++ DLL注入目标程序
向其他程序注入DLL的原理比较简单就是调用几个windowsAPI,在目标程序中开启一个线程,在这个线程中加载动态库,动态库被加载时会执行初始化的函数,我们就可以在这个初始化函数中对目标程序做任何想做的事情。。。或者让目标程序代替你的程序做一些事情。。当目标程序注入DLL后,这个负责注入的程序就可以关闭了。下面是一个简单的函数,传入目标程序的句柄和要注入的动态库的全路径。void InjectDL...原创 2018-07-08 17:50:52 · 1167 阅读 · 0 评论 -
VC++如何获取目标程序的句柄hProcess
方法一:任务管理器找到程序的PID,通过PID获取hProcessHANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);方法二:使用spy++获取目标程序窗口对应的句柄通过窗口句柄获取PID,再使用方法一的函数获取hProcess HWND wnd = (HWND)0x0003069C;DWORD pid;GetWindowTh...原创 2018-07-08 17:33:29 · 3498 阅读 · 0 评论 -
vs2012转成vs2010
因为一些原因需要高版本转换低版本需要改变的配置文件包括:sln、vcxproj、vcxproj.filters=========slnMicrosoft Visual Studio Solution File, Format Version 12.00# Visual Studio 2012变为:Microsoft Visual Studio原创 2017-02-03 19:11:06 · 538 阅读 · 0 评论 -
VC++字符串类型转换
VC++里头的字符串类型有:char*,wchar_t*,string,wstring,CString,CStringA,CStingW......其实也就多字节字符串和宽字符字符串。CStringA,CStingW的构造函数可以接收多字节或者宽字符,所以利用这两个类的构造函数就可以简单方便的任意转换了。string和wstring转换:string原创 2017-12-21 21:31:52 · 416 阅读 · 0 评论 -
VC++ 添加用户环境变量
如果已知很多环境变量,每次换机器都是相同配置,环境变量配置窗口操作觉得麻烦,可以考虑这个代码直接注册。只需要在reg.txt中按行写入:环境变量名=环境变量值程序地址:这是完整的代码实现:#include #include #include #include #include #include #include using namespa原创 2017-12-23 22:56:25 · 4016 阅读 · 0 评论 -
VC++ 只运行一个程序实例
源代码如下:#pragma once#define DECLARE_SinglePrj SinglePrj* SinglePrj::m_pSinglePrj = NULL;#define SinglePrj_InitInstance(szPropName) SinglePrj *pSinglePrj = SinglePrj::GetInstance原创 2017-12-16 14:14:22 · 1009 阅读 · 0 评论 -
windows 搭建简单c++环境【mingw】
windows下学习c++装个vs就够了,简单方便,一步到位。但是可能因为vs太大?直接用集成环境不利于学习?集成环境不利于了解编译过程和原理?....专业点的套路貌似都是:linux 、g++ 、vi毕竟linux下c++开发环境都自带了记得以前在一个群里一哥们说用g++和vi搞代码特别爽.....前段时间在一个帖子下看到一哥们调侃了这种情况,大体意思是:原创 2017-12-17 11:35:54 · 17216 阅读 · 1 评论 -
实现列表CListCtrl可点击编辑
双击list控件上某个单元,出现编辑框,编辑后可确认修改。需要在代码中管理一个eidt,在双击时,在列表对应位置用eidt覆盖,确认或进行其他操作时,隐藏edit即可。下面的代码是一个头文件,使用控件绑定。使用时,随便找一个cpp里头写一下宏DECLARE_EditListCtlMESSAGE_MAP将控件绑定的类型改成EditListCtl即可。#pr原创 2017-12-17 18:29:03 · 2946 阅读 · 1 评论 -
64位程序如何调用32位dll(简单解决方案 )
因为一些呵呵的原因,我们写64位程序时需要调用32位的dll,或者32位程序需要调用64位的dll至于为什么64位程序不能调用32位的dll,那是因为......你懂得项目中我也遇到了这么一个没法回避的问题看网上有写什么进程外com,没去研究,我用了一个比较简单的方案可以实现主要就两个方案的结合1.WM_COPYDATA2.共享内存实际的代码原创 2016-12-09 23:45:44 · 49101 阅读 · 0 评论 -
VC++使用dump定位release程序崩溃问题
包含生成dump的头文件,头文件见文章末尾全局声明宏DECLARE_DUMPGEN初始化函数中使用宏INIT_DUMPGEN(随便定义一个名字)写一个必然崩溃的按钮响应代码运行程序调用响应函数使程序崩溃,生成dump文件此时定位问题除了dump文件,还必须要exe程序,和该exe同时生成的pdb文件。双击dump文件,使用vs打开,点击 使用仅限本机进行调试【如果代码的路径位置和程序发布时没有任何...原创 2018-03-22 21:09:35 · 2733 阅读 · 0 评论 -
VS调试c++动态库最简单最高效的方法
原理是将dll工程属性修改为控制台属性,于是main函数就可以启动了。有如下动态库代码【顺便写一个main函数调用】:此时有两种方法可以修改工程属性方法一:直接修改工程对应的vcxproj文件1.将<SubSystem>Windows</SubSystem> 替换成<SubSystem>Console</SubSystem>2.将<Confi...原创 2018-03-20 18:09:54 · 3384 阅读 · 0 评论
分享