C++
奈何小洪
我奋斗,我青春
展开
-
VC 使用MSXML2创建SVG文档中的新结点时出现xmlns="" 属性解决方法
博文借鉴:https://blog.csdn.net/lujunql/article/details/6989571https://www.cnblogs.com/mq0036/p/3564955.html由于最近有需求需要把素材下载到P2介质中,相关的xml文件需要自己写入,在写入xml时遇到了根结点下第一个子结点会自动添加xmlns=""属性。上网一查才发现是MXSML原本存在...原创 2019-08-16 14:32:48 · 651 阅读 · 0 评论 -
c++智能指针的简单实现
#include "stdafx.h"#include #include #include using namespace std;class RC//引用计数器{private: int count;public: void AddRef() { count++; } int Release() {原创 2016-06-19 23:52:09 · 682 阅读 · 0 评论 -
c++全局变量
(1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。那么,错误可能在两个地方产生:一个,编译时的错误,这个主要是语法错误;一个,链接时的错误,主要是重复定义变量等。编译单元指在编译阶段生成的转载 2016-07-14 11:41:45 · 1235 阅读 · 0 评论 -
C++文件(夹)选择对话框
由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有。今遇到这个情况已经解决,特写下这篇博文。1.打开文件对话框常用的方法是使用系统的CFileDialog。这里介绍另外一种方法就是使用OPENFILENAME这个结构体和GetOpenFileName()这个函数,可以实现单选文件或者多选文件,代码如下:[cpp] view pla转载 2016-06-01 11:29:43 · 3579 阅读 · 0 评论 -
【算法逻辑】保持字符串内符号位置不变,其他字符随机变化
#include #include #include void CPage1::OnBnClickedButton3(){ // TODO: 在此添加控件通知处理程序代码 CString strbegin, strcount; m_begin.GetWindowText(strbegin); if (strbegin == "") { return; } string原创 2016-04-26 17:42:40 · 668 阅读 · 0 评论 -
通用功能模块(时间获取,时间转换,文件控制,本地主机信息等)
#pragma once#include #include #include #include #include #include #include #include #pragma comment(lib, "IPHLPAPI.lib") u_char g_ucLocalMac[6]; DWORD g_dwGatewayIP; DWORD g_dwLocal原创 2016-03-10 14:18:02 · 589 阅读 · 0 评论 -
BITMAP位图文件保存方法
/************************************************************************/ UCHAR* pData = {0}; //假设里面保存了图片信息 BITMAPINFOHEADER bih = {0}; //位图信息头 bih.biBitCount = ImagePerPix; //每个像素所占字节大小 bih.b原创 2016-04-01 15:03:22 · 892 阅读 · 0 评论 -
UDP数据的接收
概要Udp协议为非面向连接的协议,数据的发送与接收并不需要像TCP/IP协议那样事先建立连接,因此在数据发送速度及资源消耗表现上都胜于TCP/IP;但UDP为非可靠协议其发送(接收)数据并不一定能够保证对方能够正确的接收(发送),其可靠性需要另外的机制来实现。 发送端的实现用到的几个函数1. WSAStartup:启动Winsocket2. sock原创 2016-03-09 11:48:48 · 13017 阅读 · 0 评论 -
根据鼠标起点和落点判断鼠标操作
1.需要声明对话框的消息解析函数virtual BOOL PreTranslateMessage(MSG* pMsg);2.对鼠标按键进行判断,当前以鼠标左键作为例子:BOOL CDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if(WM_LBUTTONDOWN== pMsg->message) {原创 2016-03-18 13:53:10 · 752 阅读 · 0 评论 -
__stdcall,__cdecl,__fastcall的区别
__stdcall,__cdecl,__fastcall的区别一、三者区别一览表 __stdcall__cdecl__fastcall参数传递方式右->左 压栈右->左 压栈左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送转载 2016-02-18 12:19:34 · 421 阅读 · 0 评论 -
内存池的使用(一)
引言C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合转载 2015-12-09 16:17:31 · 879 阅读 · 2 评论 -
const 指针与指向const的指针
当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。 先说指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。 const int* p; (推荐) int const* p; 第一种可以理解为,p转载 2015-12-21 00:29:17 · 486 阅读 · 0 评论 -
内联函数和宏定义的区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2015-12-19 23:02:13 · 535 阅读 · 0 评论 -
清除缓存相关明细
#include "StdAfx.h"#include "GlobalDealMsg.h"#include "Interface.h"#include "Http_Data_Api_Php.h"#include "Http_Data_Api_Server.h"#include #include #include #include #include #include #i原创 2015-11-06 15:10:57 · 452 阅读 · 0 评论 -
内存池的实现(二)
《内存池的实现(一)》中,介绍了使用内存池的原因,设计内存池应该考虑的问题,最后给出一个简单的内存池实现例子。使用上一篇文章中介绍的内存池实现方案,要在一定的限定条件下,下面我们来看更通用的内存池实现——Apache服务器的内存池实现。 Apache服务器的开发人员将代码中可移植的部分整理出来,编辑成Apache可移植运行库(Apacheportable Run-timelibra转载 2015-12-09 16:18:54 · 442 阅读 · 0 评论 -
WIN32 socket编程
服务端#include "stdafx.h"#include #include #include #include #define SVCPORT 12345#pragma comment(lib, "Ws2_32.lib")using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //初始化socket转载 2015-10-15 16:23:03 · 584 阅读 · 0 评论 -
查看Dll接口
VS2010里vcvarsall.bat是在D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC目录下,运行方法是直接将vcvarsall.bat文件拖入命令行窗口,然后回车。(拖入相当于在命令行中输入“D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat转载 2015-10-15 11:22:58 · 7717 阅读 · 0 评论 -
c++实现ping模块
#pragma once//这里需要导入库 Ws2_32.lib,在不同的IDE下可能不太一样 #include #pragma comment(lib, "Ws2_32.lib")#define DEF_PACKET_SIZE 32#define ECHO_REQUEST 8#define ECHO_REPLY 0struct IPHeader{ BYTE m_b转载 2016-06-20 10:21:52 · 3215 阅读 · 4 评论 -
线程同步的小例子
// example.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std;vector vc;HANDLE m_mutex;DWORD WINAPI fun1(void* g){ while(1) { Sleep((r原创 2016-06-21 23:45:09 · 687 阅读 · 0 评论 -
TCP之 Event select模型
前记:select模型主要用于解决传统tcp通信线程过多的问题,而EventSelect模型则用于解决select模型的效率问题,因为select模型的内部是使用Sleep函数来阻塞线程,然后消耗系统时间片,从而降低了效率,而event select模型则使用WSAEVENT的通知机制。服务端:// 20180527_socket.cpp : 定义控制台应用程序的入口点。//#include...翻译 2018-07-04 17:40:07 · 991 阅读 · 0 评论 -
Dll高级技术之【延迟加载】
【DLL的隐式加载】:1.在Lib中包含导入库MyLib.lib2.cpp中包含头文件MyLib.h3.运行目录里面包含MyLib.dll【DLL的显式加载】:1.运行目录里面包含MyLib.dll2.LoadLibrary及GetProcAddress【DLL的延迟加载】:1.需要DLL,MyLib.lib导入库及MyLib.h 进行【隐式加载】的全步骤3.属性->配置属...原创 2018-05-30 17:19:28 · 4575 阅读 · 2 评论 -
c++删除字符串特殊符号
std::string RemoveSpcSymbol(std::string strSource)//删除符号{ char *str = strSource.c_str(); char buf[MAX_PATH] = { 0 }; int j = 0; for (int i = 0; i < strlen(str); i++) { if (str[i] > 0 &a...原创 2018-04-17 16:36:54 · 6525 阅读 · 0 评论 -
近期汇总:锁定任务栏 - 托盘图标重载 - 获取win10系统版本号
//1. 锁定任务栏并置灰BOOL LockTaskBar(){ BOOL bSuc = FALSE; DWORD dwDisposition = REG_CREATED_NEW_KEY; HKEY hCheckKey; //勾选 锁定任务栏(不能先置灰再勾选) if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER, "Softw...原创 2018-03-15 16:00:07 · 611 阅读 · 0 评论 -
MFC中使用COM组件更改桌面壁纸或图标
需要包括的头文件方法如下所示:一、在 stdafx.h 文件中添加如下头文件:#pragma once#ifndef VC_EXTRALEAN#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料#endif#include "targetver.h"#define _ATL_CSTRING_EXPLICIT_CON转载 2017-10-26 15:42:43 · 656 阅读 · 0 评论 -
jsoncpp中获取key的方法
首先,铺一下需求:$arr = array('key1'=>array('value1'),'key2'=>array('value2'),'key3'=>'value3');echo $json = json_encode($arr);输出的内容如下:{“key1″:["value1"],”key2″:["value2"],”key3″:”value3″}熟悉转载 2017-11-08 17:33:35 · 11529 阅读 · 4 评论 -
使用ICON动态修改exe文件图标
前言:这两天为exe文件做一个随机图标的功能,要求每次运行后图标都动态改变,在网上找了很多代码,都有一部分缺陷,参考了一些文档后进行了修改,现在在此进行总结:一个icon资源(可以是*.ico文件,也可以是windows资源节区里的icon group),可以包含多张图片。这些图片有着各自的size或者颜色深度,这些图片可以是bmp格式或者png格式(vista之后支持,一般256*256时使原创 2017-09-29 16:42:04 · 5931 阅读 · 0 评论 -
安全获取操作系统位数
// 安全的取得真实系统信息void SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo){ if (NULL == lpSystemInfo) return; typedef VOID(WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); LPFN原创 2017-08-03 14:05:19 · 500 阅读 · 0 评论 -
C++全局变量和静态变量的使用
参考:http://wrchen.blog.sohu.com/71617539.html(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错误可能在两个地方产转载 2017-03-16 13:43:08 · 2044 阅读 · 0 评论 -
进程同步之事件(Event)
事件做为内核对象,即可用户线程间同步,又可用于进程同步,下面的测试代码用于进程间同步,不清楚的同学请留言。A进程Demo:#include "stdafx.h"#include#include using namespace std;DWORD _stdcall ThreadFunc (_In_ LPVOID p){ int x=1; HANDLE pEvent = *(原创 2017-03-22 22:13:02 · 5238 阅读 · 0 评论 -
冒泡排序、插入排序、快速排序的简单实现
#include "stdafx.h"#include #include using namespace std;//冒泡排序void BubbleSort(int *arr, int sz){ int iTemp = 0; for (int i = 0; i < sz; i++) { for (int j = sz-1; j > i; j-- ) { if (a原创 2017-02-21 14:58:24 · 482 阅读 · 0 评论 -
GDI图像基本操作
GDI图像基本操作:借鉴自:http://blog.csdn.net/harvic880925/article/details/9129011实例:void CMFC_GDI_TESTDlg::OnLoadImg(){ // 基本变换 CDC* cdc = GetWindowDC(); Gdiplus::Graphics graphics(cdc->GetSafeHdc());原创 2017-01-18 11:58:59 · 1306 阅读 · 0 评论 -
C++ 内存分配(new,operator new)详解
转载自:http://blog.csdn.net/wudaijun/article/details/9273339 本文主要讲述C++ new运算符和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池,STL中的应用。一 new运算符和operator new():转载 2016-11-09 13:38:04 · 493 阅读 · 0 评论 -
C++ std::tr1::shared_ptr使用
看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。恩,以后都用shared_ptr。shared_ptr在最新的c++11中,已经被列入了转载 2016-09-18 11:47:48 · 3639 阅读 · 0 评论 -
C++开源代码项目汇总
本文转载自:http://blog.csdn.net/wenrenhua08/article/details/40040903Google的C++开源代码项目v8 - V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎。V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。V8 根据 EC转载 2016-08-30 09:16:29 · 993 阅读 · 0 评论 -
c++ primer plus第五版读书笔记
第一章 c++简介:1.c语言是基于过程的,自上向下的编程语言先分析大的解决方向,逐渐细化。c++是面向对象的OOP,自下而上的编程语言先设计类,然后将他们串联起来优点是:保护数据,代码重用,可移植性强2.c++的OOP与通用编程都是强调代码重用不过OOP强调的是数据方面,而通用编程强调的是算法方面3.OOP提供了高级抽象,C语言则提供了低级硬原创 2016-08-03 11:25:04 · 1926 阅读 · 0 评论 -
TinyXML:一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象转载 2015-11-13 15:19:04 · 635 阅读 · 0 评论 -
std::vector元素去重方法
STL中Unique函数的作用是去除相邻重复元素#include#include#includeusing namespace stdint main(){int a[10] = {7,4,1,7,4,1,7,4,1,0};sort(a,a+10);//小到大vectorver(a,a+10);vector::iterator iter = un转载 2015-11-09 18:52:18 · 7549 阅读 · 0 评论 -
C语言运算符优先级
c中的运算优先级:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参原创 2015-04-09 16:09:47 · 664 阅读 · 0 评论 -
pugixml库之xml解析库
前言:本文介绍c++编写的xml解析库——pugixml,能解析xml内容,支持xpath解析,同时能够跨linux平台,非常方便。总结一下使用步骤和简单的使用方法:使用pugixml库需要三个文件:pugiconfig.h/pugixml.h/pugixml.cpp,可直接从gugixml官网下载,将其加入工程,使用处包含头文件pugiconfig.h/p原创 2015-04-10 17:43:51 · 5418 阅读 · 0 评论 -
各种钩子函数详解
钩子类型每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。下面描述所有可以利用的Hook类型。1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRETHooks使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROCHook子程,并且在窗转载 2015-04-01 14:41:18 · 860 阅读 · 0 评论