C++
mengzhisuoliu
我有我自由你有感受
展开
-
【复制构造函数,赋值函数正确使用场景】
复制构造函数,赋值操作符原创 2022-04-16 08:59:45 · 265 阅读 · 0 评论 -
不调用swap,利用数学,两整数交换
不调用swap,利用数学,两整数交换原创 2022-04-09 11:16:01 · 316 阅读 · 0 评论 -
解决windows系统字体设置为125大小导致程序界面位置不一致的问题
在用户设置的显示为中等的情况下,125%,会导致界面的显示的位置不同,并且会导致滚动无法滚动到指定的位置我们可以通过该代码获取原始的比例进行适当调整 int nData1 = GetDeviceCaps(::GetDC(this->GetSafeHwnd()), LOGPIXELSY); m_uiZoomRate = (float)nData1 / 96;//100%是每英寸96个像素,原创 2017-12-29 11:53:25 · 8137 阅读 · 0 评论 -
Windows Hook Api
今天在写Hook ws2_32 的函数send的时候,发现总是让程序崩溃,崩溃的时候程序的崩溃点总是在ws2_32的模块中,最后发现在调用Hook函数时候,我进行了还原,还原的保护代码是PAGE_READWRITE,这样子导致其他线程在执行对应的地址代码产生了一个执行错误的代码!哎,太久没有使用逆向了,导致就生疏了!具体原因是:VirtualProtect ( pOld原创 2017-12-14 21:25:13 · 387 阅读 · 0 评论 -
stringsream 中的clear 以及 str() 使用
string line = "1 2 3 4 5"; stringstream s1(line); string szNumTemp; int nData; stringstream s2; while (s1 >> szNumTemp) { TRACE("szNumTemp:%s\n",szNumTemp.c_str()); s2 << szNumTemp;/原创 2017-11-24 11:04:43 · 531 阅读 · 0 评论 -
程序异常立刻退出,如何定位关键代码位置
今天在调试一款程序的时候,发现这个运行在加载一个flash动画就立马退出了,调试了很久都米有办法抓到关键的代码位置,后面在调试终于找到了异常的代码点!主要是通过vs的输出找到的,还是记录下来,方便以后使用这个绝技!'Game.exe' (Win32): Unloaded 'F:\hdw_v2.0\system\Flash9f.ocx'The thread 0x37a0 has exit原创 2017-12-02 23:35:51 · 1405 阅读 · 0 评论 -
浮点类型 比较特别的操作,取整和不四舍五入
//下面结果所得2.5678 保留两位不进行4舍5入等于2.56 double nCurExpose=25678; double nCurRGB=10000; double dblRgbScale=(double)nCurExpose/(double)nCurRGB;//2.5678 int nRgbScale=(int)(dblRgbScale*100);//非4舍五入操作保留两位小数点原创 2017-12-19 18:28:23 · 1232 阅读 · 0 评论 -
C++ 继承,private 以及 protected
class CA{public:protected: private: int nID;//声明为private};class CB:public CA{public: CB(){ nID=0;//第二层不能访问了 }protected:private:};class CA{public:protected: int nID;//声明为pro原创 2017-12-01 14:52:07 · 243 阅读 · 0 评论 -
WSACleanup 崩溃,以及使用注意
WSACleanup 在多线程多次调用会产生内存崩溃等现场发生!由于程序模块其他对象正在使用网络库等操作,而此时如果调用WSACleanup 则一定会崩溃!一般程序模块在启用的时候调用一次WSAStartup,退出时候调用WSACleanup ,DLL模块也是,这用就可以及时销毁网络资源原创 2017-10-20 11:58:32 · 3212 阅读 · 0 评论 -
vsprintf,vsprintf_s
最近在修复先前的源码的时候将vsprintf 都替换成vsprintf_s,发现竟然有很大一个坑在等着俺,哎!为什么呢?因为vsprintf_s 竟然没有vsprintf 写得好!LG2("nihao","%你好吗?");void LG2(char const* type, char const* format, ...){ char buf[8192] = {0}; int le原创 2017-08-06 23:29:03 · 11568 阅读 · 0 评论 -
ICommand 重定义
在vs工程中的头文件中使用#include 编译的时候竟然报了一大串ICommand 重定义,这暂时不知道为什么这样子,1.最简单的解决方法就是在cpp文件#include 编译完整通过原创 2017-07-28 10:50:20 · 322 阅读 · 0 评论 -
Visual Assist 返回下一个光标点的设置
一直以来我使用的都是Alt+Left Arrow 返回上一个光标点,但是就很奇怪Alt+Right Arrow竟然不是返回前一个光标点,一直忍着没去搞,今天 研究了一下,终于设置好了现在分析和写代码更加方便了,看图原创 2017-08-12 17:18:39 · 687 阅读 · 0 评论 -
vc++ __super 支持
今天在vs编写类继承的时候,突然想起有没有vc++支持的父类的super写法,网上查了下资料,果然有,于是记录下来class CA{public: CA(){ } virtual void printf(){ TRACE("这是类A输出\n"); }protected: volatile int nID;//声明为protectedprivate: };clas原创 2017-12-29 18:57:25 · 1755 阅读 · 0 评论 -
vs2017 shlobj.h 报错 unexpected token 'identifier' (意外令牌'标识符')
Error C2760 syntax error: unexpected token 'identifier', expected 'type specifier' c:\program files (x86)\microsoft sdks\windows\v7.1a\include\objbase.h 239 Warning C4091 'typedef '...原创 2019-08-05 17:47:55 · 6104 阅读 · 0 评论 -
数据结构之二叉树的遍历,前序遍历,中序遍历,后序遍历
二叉树的遍历,分为前序遍历,中序遍历,后序遍历,对这几种遍历总是有点模糊,今天做一下详细的笔记吧前序遍历:A B C D E F G H K,遍历指导:从根节点开始,先左后右中序遍历:B D C A E H G K F,遍历指导,从左节点开始,一直遍历到无左节点,然后回溯。(先左后右)后序遍历:D C B H K G F E A,遍历指导,先左后右,最后根...原创 2019-07-24 14:35:18 · 900 阅读 · 0 评论 -
vs2010 编译时 wcstok_s 未定义 解决方案
Error 21 error C3861: 'wcstok_s': identifier not found D:\Microsoft Visual Studio 10.0\VC\include\tchar.h 794今天在编译nodepad++ 一个插件的时候编译的时候竟然出现上面的一个错误,找了很久都没有办法解决。LocationNavigate.cpp...原创 2019-07-07 11:40:35 · 563 阅读 · 0 评论 -
C++ template 中的class 和 typename 的区别示例
转载https://blog.csdn.net/Function_Dou/article/details/84644963可以先看看上面的文章,下面是示例template<class T>class people{public: typedef T value_type; typedef T* pointer; typedef T& refere...转载 2019-07-04 11:33:54 · 1031 阅读 · 0 评论 -
C++ VC++ C2662编译报错
Error C2662 'bool CListFileItem::equal2(const CListFileItem &)': cannot convert 'this' pointer from 'const CListFileItem' to 'CListFileItem &'意思:无法将 this 指针 从一个const CListFileItem 类...原创 2019-05-21 14:58:49 · 384 阅读 · 0 评论 -
C++ operator 的超棒demo
class CStrPtr { LPTSTR m_szStr;public: // A collection of constructors. CStrPtr(); CStrPtr(int iSiz); CStrPtr(CStrPtr& utStr); CStrPtr(LPCTSTR szStr); ~CStrPtr(); //类型转换的操作符写法,可以看到返回...原创 2019-05-06 13:59:11 · 207 阅读 · 0 评论 -
OpenSSL安装文档(官方翻译)
Windows平台的注意:Windows目标可以归类为“本机”,即直接使用Windows API和依赖POSIX兼容层“托管”。 “本机”归结于VC-*(其中“VC”源于缩写Microsoft Visual C编译器)和MinGW[64]。“托管”平台是Cygwin和MSYS[2]。 甚至虽然后者([2])不是OpenSSL团队直接支持的,但它是Cygwin#1建立MinGW目标的热门...原创 2019-03-11 22:07:21 · 954 阅读 · 0 评论 -
libcurl在windows中编译和使用的说明文档(官方翻译)
使用Visual C构建先决条件本文档描述了如何编译,构建和安装curl和libcurl从使用Visual C构建工具的来源。 要用VC构建,你会当然要先安装VC。 所需的最低版本VC是6(Visual Studio 6的一部分)。 但是使用更新的版本是强力推荐。VC也是Windows Platform SDK的一部分。 您不必安装完整的Visual Studio或如果你想要的只是构...原创 2019-03-11 17:09:03 · 902 阅读 · 0 评论 -
fopen 与 fopen_s
FILE * fopen(const char *file, const char *mode) { return( _fsopen(file, mode, _SH_DENYNO) ); //_SH_DENYNO允许共享读写操作} errno_t fopen_s(FILE ** pfile, const char *file, const char *mode)原创 2017-08-04 14:55:21 · 1030 阅读 · 0 评论 -
InitializeCriticalSectionAndSpinCount以及InitializeCriticalSection的区别
InitializeCriticalSectionAndSpinCount和InitializeCriticalSection 都是临界区的一种初始化,可是前者多了dwSpinCount参数,这个参数的作用是在进入临界区的时候CPU自选计数为什么要引用这个参数呢?在EnterCriticalSection调用这个参数,如果线程无法获取临界区则会进行睡眠,则CPU则进行线程环境上下切换,原创 2017-08-01 12:16:53 · 3385 阅读 · 0 评论 -
C++ 虚函数使用注意
今天在类中编写一个成员函数,编译器一直编译到最后都连接错误,可是明明我在类中已经声明和定义了,为什么会找不到这个函数的连接呢?class A{ A(); virtual ~A(); virtual void testA() =0; void test(){}//所以这里需要加上 virtual //virtual void test(){}}class B:publ原创 2017-07-21 16:12:04 · 305 阅读 · 0 评论 -
静态库和动态库
今天见识了一份游戏源码的静态库乱使用导致N多Bug,使得修复难度可以说是一级棒!原来的游戏源码是定义了一个log类,里面有一份静态成员变量指针,在多个模块中使用这个log类,当每一个模块去使用的时候判断这个指针是否为空,为空表示未初始化则重新初始化,后面发现在.exe中初始化了这个成员指针,但是在其他模块又使用到这个log类,作者希望这个指针只初始化一次即可,但是未想到的是,这个成员变量在另外原创 2016-12-04 21:14:30 · 234 阅读 · 0 评论 -
在使用lua的tolua的内存泄露注意
最近在项目中使用vector的导出类为lua使用,在测试内存泄露的时候发现会有内存泄露,当时以为是哪一处的C++代码写得有问题,最后发现是脚本在调用vector中出现了问题,1.vector是一个local变量 ,local vc=new vector()2.自认为lua会在内存清理的时候调用collectgarbage自动清理内存的,后来发现这是不正确的,lua并不会自动清理这原创 2016-11-20 22:17:13 · 2251 阅读 · 0 评论 -
winsock recv函数使用注意
Winsock int recv( SOCKET s, char FAR *buf, int len, int flags 支持MSG_WAITALL);在使用这个函数的时候为了能够一次性接收客户端的封包,我尝试使用了MSG_WAITALL的标志,但是这个标志使用上竟然有点奇怪,网上资料也相对比较少,最后在原创 2016-08-12 15:49:26 · 3861 阅读 · 1 评论 -
GlobalAlloc 分配的内存上限
对于Win32的程序,GlobalAlloc分配的内存只能分配0x1FFFFFFF大小,估计这个大小还会根据程序实际的情况而定,如果程序空间已经通过调用GlobalAlloc分配了空间但是还没有GlobalFree掉估计后续分配的空间也会降低,估计由于2G的程序运行空间大小限制了分配内存的大小!并且GlobalAlloc分配的内存是会调用DS:[7D851018]=7DE9E1B6 (nt原创 2016-08-23 23:33:17 · 908 阅读 · 0 评论 -
C++ map模板类使用注意
一直使用map模板类,感觉很方便也很好用,在使用的过程中,但是用了这么久还是偶尔没有注意到其特殊性,导致偶尔代码出错 map mapSort; mapSort[1]=8; mapSort[2]=7; int j=mapSort[0];//这如果进行这样取值,如果mapSort里面没有包含了0的key,mapSort将会自动增加一个以0为key,值等于0的元素 //其实作者本来的意思是想原创 2016-08-27 22:44:00 · 2887 阅读 · 0 评论 -
rapidjson 使用例子
Document document; Document::AllocatorType& allocator = document.GetAllocator(); Value root(kObjectType); Value child(kObjectType); child.AddMember("a","1",allocator); child.AddMember("b","2原创 2016-05-25 09:28:53 · 2484 阅读 · 1 评论 -
C++设计模式之外观模式(Facade)
外观模式我们平时还是挺常使用的!#include "StdAfx.h"#include #include#include#include#include #include using namespace std;class Customer{//客户public: string m_Name; Customer(string name原创 2015-07-16 13:51:02 · 489 阅读 · 0 评论 -
C++设计模式之组合模式(Composite)
#include "StdAfx.h"#include #include#include#include#include #include using namespace std;class Employee{public: string m_Name; DWORD m_Salary; virtual void Add(Employee* pObj)=0原创 2015-07-16 14:12:33 · 302 阅读 · 0 评论 -
C++设计模式之享元模式(FlyWeight)
FlyWeight享元模式,其实就是为C++在构造大量对象的时候进行减肥,以减少内存的使用,其特征是工厂类里包含了缓冲区模式,以下两种实现的区别就是第一种汽车有将其m_Brand的品牌提取到一个FlyWeight,将公共数据成员共享!#include "StdAfx.h"#include #include#include#include#include #include #inc原创 2015-07-16 13:48:52 · 361 阅读 · 0 评论 -
C++设计模式之代理模式(Proxy)
#include "StdAfx.h"#include #include#include#include#include #include #include using namespace std;class Subject{public: virtual void Request() { printf("基类对象的请求....\n");原创 2015-07-16 11:26:59 · 348 阅读 · 0 评论 -
C++设计模式之桥接模式(Bridge)
#include "StdAfx.h"#include #include#include#include#include using namespace std; class BaseRoad{public: virtual void Run()=0;protected:private:};class BaseCar{public: BaseRoad原创 2015-07-16 14:16:33 · 304 阅读 · 0 评论 -
Windows的全局名称锁与共享问题
1.CreateFileMapping2.CreateMutex如果名称相同的话会导致其中一个创建失败,所以需要注意原创 2016-12-21 14:32:42 · 418 阅读 · 0 评论 -
fclose调用注意
FILE* pFile=NULL;如果pFile打开了一个文件,只能调用fclose(pFile)一次,然后设置pFile=NULL,避免fcose多次,否则会产生异常不到的崩溃原创 2017-02-08 14:57:56 · 2961 阅读 · 0 评论 -
C++赋值运算符谨记
obj& operator=(const obj& copy){if ( this=© )return *this;//没啥事也要加上..............................}原创 2017-01-20 22:56:21 · 274 阅读 · 0 评论 -
C++ 析构函数
我们在使用C++析构函数一定要加上virtual 关键字,因为在继承的情况下,可以通过基指针直接delele释放类的资源,否则直接delete基类指针会造成内存泄露,或者自己手动加上类型指针转换后再释放! class A{ A(){} ~A(){} } class B:public A{ B(){} ~B(){} } A* pA=new B(); delete原创 2017-07-21 14:33:43 · 381 阅读 · 0 评论 -
TCP 状态图
转载 2017-06-08 14:58:47 · 238 阅读 · 0 评论