C++
文章平均质量分 69
KFPA
从事软件开发工作
展开
-
分析、定位Android Native Crash
出于执行效率、业务安全、复用已有代码的需求,目前市场上越来越多的 Android App 采用 C/C++ 来实现其关键逻辑。C/C++ 有内存管理灵活、与 linux 底层联系更紧密、多种编程范式等特点,但也正是由于这些特点,使得普通开发人员在使用 C/C++ 开发时,更容易出让进程直接崩溃的 bug。所以能分析 C/C++ 崩溃日志并能从日志中分析出原因,成为 Android 开发人员一项必备...原创 2019-04-15 14:06:39 · 930 阅读 · 0 评论 -
WinAPI: DrawTextEx - 多功能文本绘制
//声明:DrawTextEx( DC: HDC; {设备句柄} lpchText: PChar; {文本} cchText: Integer; {要绘制的字符个数; -1 表示全部} var p4: TRect; {矩形结构} dwDTFormat: UINT; {选项转载 2017-06-01 11:15:52 · 931 阅读 · 0 评论 -
FALSE/TRUE与false/true的区别
FALSE/TRUE与false/true的区别1.FALSE/TRUE与false/true的区别:false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define定义的INT数据,主要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:#ifndef FALSE#define FALS转载 2017-06-01 10:25:13 · 721 阅读 · 0 评论 -
Unicode、GB2312、GBK和GB18030中的汉字
Unicode、GB2312、GBK和GB18030中的汉字GB18030有两个版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特点是在GBK基础上增加了CJK统一汉字扩充A的汉字。GB18030-2005的主要特点是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。本文数一数GB18030中的汉字,也顺便看看其它标原创 2017-06-01 10:03:32 · 1709 阅读 · 0 评论 -
explicit显式关键字
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2017-05-10 09:28:01 · 464 阅读 · 0 评论 -
STL概述
STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以后接一对圆括弧的方式表示,例如sort()。STL另一个重要特性是它不是面向对象的。为了具有转载 2017-04-27 14:24:38 · 395 阅读 · 0 评论 -
进程之间的通信-邮槽实现
要点:1、一种可以实现本地进程与远程进程通信的方式,比socket实现更简单。2、服务端是创建油槽的那一端,客户端用CreateFile来打开创建好的油槽。3、油槽是单向的,服务端只接收,客户端只发送。引子前面的一篇博文介绍了进程之间通信的一种最为简单的方式,也就是在本地进程之间通过剪贴板来实现进程间通信,而剪贴板自有其缺陷,很显转载 2017-04-27 08:49:37 · 620 阅读 · 0 评论 -
进程之间的通信-剪切板
要点总结:1、剪切板是操作系统维护的一块内存区域,本机所有进程都可以访问。2、剪切板内存从哪里来?不是一开机就分配的,是程序要将数据放入剪切板时分配内存的。3、但:malloc和 new内存是在当前进程的私有地址空间中分配内存,并不能被所有进程共享。4、所有:用GlobalAlloc分配内存,此内存不为任一进程私有,而是由操作系统管理。5、特点:只能用于本地进程间通信。转载 2017-04-26 11:46:55 · 934 阅读 · 0 评论 -
C++11中的std::bind
看看这段代码这几天学习Cocos2d-x,看到了以下的一段代码:// new callbacks based on C++11#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)#define CC_CALLBACK_1(__se转载 2017-05-18 09:30:25 · 391 阅读 · 0 评论 -
C++中进程间相互通信的十一种方法
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方 另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的原创 2017-04-19 15:53:31 · 4966 阅读 · 0 评论 -
VS的TFS(团队资源管理器)
Team Foundation Server(TFS)是微软的团队资源管理器,与VS可以完美契合。TFS有收费版和免费版,对于5人左右的小团队,免费版本足以。TFS是以SQLServer作为支撑的,所以,安装TFS必须要安装SQLServer,两者安装没有先后要求,一般先安装SQLServer,再安装TFS,安装完后就直接配置。两者的安装一路默认,按照正常的安装方式就行,但转载 2017-05-16 15:36:21 · 31055 阅读 · 1 评论 -
VC2008下CRichEditView加载RichEdit4.1版本
在之前的文章《RichEdit 各个版本介绍》中,写到RichEdit已经到达6.0版本了,而我们经常编程使用的却还是2.0,在vc6.0中甚至还使用1.0版本,更高的版本修复了很多的bug,还提供了许多新特性,我们没有理由不去使用它们。在此介绍,在VS2008SP1中如何加载RichEdit4.1版本,甚至更高版本的也可以类似加载。原理:1.启动VS2008,新建一个基于CRichE转载 2017-05-26 09:29:52 · 675 阅读 · 0 评论 -
RichEdit的各个版本简介
RichEdit是开发中经常使用到的控件,其版本自1.0起,历经好几年,好几次的更新,在此引用一篇介绍RichEdit版本的博文(http://blogs.msdn.com/b/murrays/archive/2006/10/14/richedit-versions.aspx),留个爪印记录下,以备查看。VersionShips ('ed) with转载 2017-05-26 08:36:09 · 1151 阅读 · 0 评论 -
纵向编辑框的例子
#pragma once// CVertRichEdit headerclass CVertRichEdit : public CRichEditCtrl{ DECLARE_DYNAMIC(CVertRichEdit)public: CVertRichEdit(); virtual ~CVertRichEdit();protected: CFont m_Font;原创 2017-05-26 08:20:48 · 407 阅读 · 0 评论 -
Windows系统下的多显示器模式编程
(一) Windows系统下的多显示器模式的原理 Microsoft新的操作系统(Windows 98//Windows 2000//Windows XP)内置了对多监视器的支持,即用户可以在一台计算机上安装多个显示卡并接上多个显示器,然后把这些显示器的显示区域组织成一个大的虚拟的Windows桌面。每一个显示区域的底部都有系统任务栏,我们可以在任何一个显示区域内增加桌面快捷方转载 2017-04-24 09:37:48 · 1553 阅读 · 0 评论 -
c++获取屏幕大小
c++获取屏幕大小API:要取得屏幕大小,可以用下面几个函数:int cx = GetSystemMetrics( SM_CXFULLSCREEN );int cy = GetSystemMetrics( SM_CYFULLSCREEN );通过上边两个函数获取的是 显示屏幕的大小,但不包括任务栏等区域。int转载 2017-04-24 08:59:42 · 2614 阅读 · 0 评论 -
调整.NET控件WebBrowser的默认浏览器内核版本
摘要: 调整.NET控件WebBrowser的默认浏览器内核版本今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件。但是却发现了一件很神奇的事情:当前浏览器使用的内核,可以通过访问下面这个网站获取:http://ie.icoa.cn/我的IE版本为IE8,在使用IE登录页面的时候,使用的内核是IE8,登录该网站的截图如下:转载 2017-05-12 16:52:38 · 1697 阅读 · 0 评论 -
内存拷贝函数
自己动手写的一个内存拷贝函数,但是发现无法判断目标内存区域是否有足够空间容纳源内存大小 #include void* memcpy(void*,const void*,int); int main(int argc,char *argv[]) { char arr_a[7]={'a','b','c','d','e','f','\0'};原创 2017-05-03 11:32:16 · 561 阅读 · 0 评论 -
DrawTextEx - 多功能文本绘制
DrawTextEx()详解原创 2017-06-01 11:19:24 · 1502 阅读 · 0 评论 -
C++基础知识总结
1. inline 为了解决一些频繁调用的小函数大量消耗栈空间的问题,特别引入了inline修饰符,表示内联函数。 Inline仅仅是对编译器的建议,并不是申明了内联就会内联。 内联函数的定义需要放在头文件中实现。 定义在类中的成员函数缺省都是内联的。 关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前不起任何作用。Inline是用于实现...原创 2018-08-28 10:26:27 · 684 阅读 · 0 评论 -
面向对象三大基本特性,五大基本原则 .
透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础.三大特性是:封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界...转载 2018-07-04 09:02:53 · 860 阅读 · 0 评论 -
vc中调用Com组件的方法详解
1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGetResEx--方法HelloEx()2.在工程中导入组件或类型库 #import "组件所在目录myCom.dll" no_namespace或 #import "类型库所在目录myCom.tlb" using names转载 2017-11-02 08:39:39 · 3531 阅读 · 0 评论 -
字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,“乱码问题”一直是让人头疼的问题,也许您已经很少遇到“乱码”问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序员,在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂、不清不楚;在工作中也曾经遇到一个很烦人的编码问题。这两天在网上收集了大量编码方面的资料,对字符编码算是理解的比较清楚了。下面把我认为比较转载 2017-09-20 15:31:43 · 345 阅读 · 0 评论 -
正则表达式的中文匹配
这里是几个主要非英文语系字符范围2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字转载 2017-09-27 11:20:27 · 987 阅读 · 0 评论 -
string与wstring转换
string与wstring转换方法一:MultiByteToWideChar、WideCharToMultiByte 1 BOOL StringToWString(const std::string &str,std::wstring &wstr) 2 { 3 int nLen = (int)str.length(); 4转载 2017-09-18 16:27:45 · 497 阅读 · 0 评论 -
C++中STL对string进行trim,split,replace操作
#include #include using namespace std;namespace strtool{string trim(const string& str){ string::size_type pos = str.find_first_not_of(' '); if (pos == string::npos) {转载 2017-09-15 09:59:40 · 1422 阅读 · 0 评论 -
各种类型字符之间的转换(单字节char*和宽字节wchar_t*,TCHAR和string的转换)
//将单字节char*转化为宽字节wchar_t* wchar_t* AnsiToUnicode( const char* szStr ) { int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 ); if (nLen == 0) {原创 2017-07-13 10:29:10 · 1945 阅读 · 0 评论 -
遍历文件
#include "stdlib.h" #include "direct.h" #include "string.h" #include "io.h" #include "stdio.h" #include "iostream" using namespace std; class CBrowseDir { protected:转载 2017-08-10 17:39:01 · 514 阅读 · 0 评论 -
vc编程之CRectTracker类的用法 鼠标光标(指针)不显示问题
VC静态库下CRectTracker鼠标光标(指针)不显示问题 使用CRectTracker的类后,调用下面的函数进行鼠标光标(指针)的切换BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: Add your message handler code here and/or call def原创 2017-07-19 14:43:39 · 1458 阅读 · 2 评论 -
CString与char *互转总结
1 前言今天在网上看论坛,发现大家对CString与Char *互转各说一词,其实我发现提问者所说的情况与回答问题的人完全不是同一情况,这里做一总结.首先大家得清楚一件事,一般在网上提出问题的人大部分使用的都是VC,那么你就应该知道,在VC下编程,工程属性中有一属性Charecter Set属性,其值可以设置为Use Multi-Byte Charecter Set转载 2017-06-26 09:07:01 · 711 阅读 · 2 评论 -
VC与JavaScript交互(三) ———— JS调用C++
太监的原因: 时隔两年,VC与JavaScript交互系列的最后一篇关于JavaScript如何调用c++的文章终于出炉了。为什么会隔了那么久?因为本来打算太监的,可是看到热情的网友们的眼神,从期望变成了失望,在我的心里激起了层层波澜。两年后的今天,还是坚持把它写了出来。其实当时刚写完VC与JavaScript交互(二)的时候,参考网上的资料,已经把JavaScript调转载 2017-06-12 15:15:24 · 810 阅读 · 0 评论 -
VC与JavaScript交互(二) ———— 调用JS函数
这一章,我们来动手实践VC调用js函数。我们动手写一个HTML,其中包含这样一段JS代码:[html] view plain copyscript type="text/javascript"> function Add(value1, value2) { return value1 +转载 2017-06-12 15:14:33 · 570 阅读 · 0 评论 -
VC与JavaScript交互(一) ———— 如何实现
为什么要让VC与JavaScript交互?1.有时候我们需要让自己的软件打开一个网页,来获取页面上的一些数据。这时,可以用mshtml解析HTML提取出数据,也可以向HTML文档动态写入我们准备好的js代码,用JS代码获取HTML上的数据,然后用VC调用该JS代码取得数据。2.有时候我们需要让自己的软件打开一个网页并操控该网页,填写表单,提交等动作。这时,可以用mshtml操作HT转载 2017-06-12 15:13:31 · 541 阅读 · 0 评论 -
获取文件时间属性
WIN32_FILE_ATTRIBUTE_DATA wfad; CString strPath = "SystemTestDlg.h"; CString strInfo; ULONGLONG liFileSize; if(!GetFileAttributesEx(strPath,GetFileExInfoStandard,&wfad)转载 2017-04-14 12:09:28 · 704 阅读 · 0 评论 -
CCriticalSection的使用
CCriticalSection是对关键段CRITICAL_SECTION的封装。 关键段(critival section)是一小段代码,他在执行之前需要独占对一些共享资源的访问权。这种方式可以让多行代码以“原子方式”来对资源进行操控。这里的“原子方式”,指的是代码知道除了当前线程之外没有其他任何线程会同时访问该资源。当然,系统仍然可以暂停当前线程去调度其他线程。但是,在当前线程离开关键转载 2017-04-05 13:09:57 · 821 阅读 · 0 评论 -
C++ MFC string转Cstring详解
前段时间学习mfc编了一个小程序,其中涉及到CString 与string的转换的时候感觉特别蛋疼,因此再此总结一下经验。希望能够对大家能有所帮助 通常有两种字符集模式 unicode字符集 和 ascii字符集,其中unicode有多种编码方式。utf8, utf16和utf32,还有 utf7, 再其中。utf8 和ascii编码兼容, 但是使用两个以上的字节存储中文等。 wstr转载 2017-04-10 10:37:22 · 10079 阅读 · 0 评论 -
编译错误集锦
1、mkdir改写为 _mkdir fopen”改写为 fopen_s stricmp改写为 stricmp_sstrcpy改写为strcpy_sstrcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strc原创 2016-10-31 09:00:25 · 3749 阅读 · 0 评论 -
C++入门学习笔记
这些是我刚学习C++的笔记,拿出来与大家分享,希望大家更容易入门!1、 运算符<<(送出)用作输出运算符;cout是标准输出流。运算符>>(取入)用作输入运算;cin是标准的输入流。2、 输出:一个输出表达式的结果本身还可以用于进一步的输出。void h2(int i){ Cout<<”the value of I is”<<i<<’\n’;}3、 输入原创 2016-11-10 08:40:53 · 4004 阅读 · 0 评论 -
MFC中无标题栏窗口的移动
移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。方法一:当窗口确定鼠标位置 时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。这需要重载 CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用原创 2016-11-10 08:17:21 · 833 阅读 · 0 评论 -
系统时间的获取计算实例
有关系统时间的获取计算的三个程序实例供大家参考: 1:#include "atltime.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { CString strTime; // 用于将CTime对象格式化为字符串 // 获取当前时间并保存到curT原创 2016-10-25 11:06:57 · 915 阅读 · 0 评论