C/C++
文章平均质量分 72
Jimmy1224
这个作者很懒,什么都没留下…
展开
-
控制台程序不显示dos窗口的方法
在实际项目中,为了实现某些功能,但是不希望给用户显示windows窗口或者dos窗口时,以下是比较常用的两种方式实现窗口隐藏:方法1:在头文件下加上一句预处理命令:#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址这样编译出来的exe就无dos窗口了完整程序如下:#include<windows.h>#pragma comment( linker, "/su转载 2020-07-03 21:33:34 · 3623 阅读 · 0 评论 -
解决Inno setup调用有依赖其他dll的dll加载问题
在Inno setup打包工具中,提供了加载DLL以及调用DLL中的函数方法,相关函数声明如下图所示:[Files]Source: "A.dll"; Flags: dontcopy;B.dll为通用模块,还有其他dll依赖B.dllSource: "B.dll"; DestDir: "{app}"[Code]procedure MyFunc(hWnd: Integer; lpText...原创 2020-04-18 22:03:00 · 2088 阅读 · 0 评论 -
string和wstring相互转换
在C++项目编程中,由于项目工程被设置为Unicode编码,因此经常遇到std::string类型和std::wstring类型相互转换的场景,现在将转换方法分享给大家:%S和%s用法%s和%S都是格式化控制符,输出字符串类型。但应用宽字符函数和窄字符函数却又一定的区别,我们针对printf函数以及wprintf函数进行说明:针对窄字符函数,例如printf,sprintf函数而言:%s...原创 2020-01-31 14:47:51 · 6618 阅读 · 1 评论 -
typename 与 typedef的区别与应用
该博文主要介绍了typedef与typename的区别与主要的使用场景,并给出了几个例子,用以加深typedef 和typename的理解原创 2016-03-21 22:49:23 · 1609 阅读 · 0 评论 -
C++ 虚函数表解析
本文深入剖析了虚函数和虚函数表,介绍了虚函数的继承和覆盖场景分析,并给出相应的示意图说明原创 2016-07-23 16:45:39 · 1149 阅读 · 0 评论 -
c++ 重载 覆盖 隐藏特征分析
本文主要介绍了c++关于隐藏、覆盖、重载、虚函数主要特征,避免使用异常原创 2016-07-24 13:30:38 · 605 阅读 · 0 评论 -
Windows Data Types
本文描述了微软新增数据类型描述原创 2016-07-24 16:37:15 · 398 阅读 · 0 评论 -
C++异常处理基础
本子主要介绍了C++异常处理的基础知识和异常处理过程,详细介绍了throw、try...catch关键字的使用和特殊用法,并给出相对应的code说明原创 2016-07-17 14:41:50 · 733 阅读 · 0 评论 -
c++对象内存模型分析工具
本文介绍了vs内存模型分析工具的使用方法,以及用途原创 2016-07-27 23:43:53 · 3544 阅读 · 0 评论 -
c++编译链接过程与原理
本文主要介绍了c++基本编译和链接过程原创 2016-08-01 21:54:07 · 650 阅读 · 0 评论 -
##和#的作用
本文介绍了## 和#宏的作用原创 2016-08-01 21:56:26 · 7530 阅读 · 0 评论 -
解析static关键字
本文详细介绍了C/C++中static关键字的作用,从生命周期和可见性两个角度说明了静态局部变量、静态全局变量、静态函数、静态数据成员、静态成员函数原创 2016-09-16 21:25:15 · 1556 阅读 · 0 评论 -
c++多态实现原理
本文介绍了C++多态实现的原理转载 2016-10-23 14:55:35 · 398 阅读 · 0 评论 -
C++插件架构浅谈与初步实现
一、插件架构初步介绍 想到写本博客,也没想到更好的名字,目前就先命这个名吧。说到插件架构,或许大部分IT从业者都听过或者某些牛人也自己实现过稳定高效的插件框架。目前有很多软件以及库都是基于插件架构,例如PS、我所在行业的GIS软件如Arcgis、QGIS、还比如开源图形引擎OGRE以及OSG,这些都是插件架构,通过插件架构来进行功能的扩展。那到底什么是插件架构呢?我的理解是系统运行时转载 2016-11-06 15:30:08 · 819 阅读 · 0 评论 -
如何删除属性页和属性表单中的帮助按钮
在默认情况下,属性页对话框默认的样式可能会包含“帮助”个按钮,如果不需要这个“帮助”按钮我们可以通过修改CPropertySheet类的m_psh成员函数中的dwFlags值,同时修改CPropertyPage类的m_psp成员函数中的m_psp.dwFlag的值,如果有多个属性页则需要将每个属性页的m_psp都一一修改过。部分代码如下所示:m_psh.dwFlags &= ~PSH_HA原创 2016-11-06 18:34:47 · 1847 阅读 · 0 评论 -
理解operator HBRUSH( ) const的实现原理
问题引出在MFC中有个WM_CTLCOLOR消息,它的消息响应函数是CWnd类的OnCtlColor,其函数声明和注释如下:afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );返回值:OnCtlColor必须返回一个刷子句柄,该刷子将被用于画出控件的背景。参数:pDC 包含了子窗口的原创 2016-12-04 14:49:55 · 1398 阅读 · 1 评论 -
htons(), ntohl(), ntohs(),htons() 函数功能
在C/C++写网络程序的时候,需要使用网络字节顺序与本地字节顺序之间的转换函数,分别是如下:htonl()--"Host to Network Long"ntohl()--"Network to Host Long"htons()--"Host to Network Short"ntohs()--"Network to Host Short"之所以需要这些函数是因为计算机数据转载 2017-03-04 22:43:52 · 883 阅读 · 0 评论 -
各种计时函数使用总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf转载 2017-03-22 20:21:21 · 1356 阅读 · 0 评论 -
c++动态链接库的创建和使用
动态库动态链接库(Dynamic Link Library,DLL)是Windows操作系统中实现共享函数库概念的一种方式,这些库函数的扩展名是 ”.dll”、”.ocx”(包含ActiveX控制的库);在使用动态库的时候,往往需要提供两个文件:一个引人库(.lib)和一个DLL文件(.dll);引人库(.lib)引入库是包含该dll导出的函数和变量的符号名,可以认为是函数和变量原创 2017-05-29 21:06:04 · 2297 阅读 · 0 评论 -
显示调用析构函数潜在隐患分析
1. 显式调用的时候,析构函数相当于的一个普通的成员函数 2. 系统隐式调用析构函数的时候,会同时释放栈内存和堆内存(如果用户申请了堆内存),容易导致内存重复释放; 3. 用户显式调用析构函数的时候,只是单纯执行析构函数内的语句,不会释放栈内存,摧毁对象; 例子1class aaa{public: aaa(){} ~aaa(){cout<<"deconstructor"<<转载 2017-06-18 15:03:50 · 518 阅读 · 0 评论 -
类对象切割对虚函数调用的影响
背景现在有CFish和CAnimal两个类,并且CFish类继承于CAnimal类,它们都有breath这样的接口,只是表现形式不同,所以用虚函数来定义,类关系如下图所示; 图一 类图关系其代码实现如下://基类class CAnimal{public: CAnimal() { //构造函数 cout << "CAnimal Const原创 2017-06-18 18:16:38 · 441 阅读 · 0 评论 -
面向对象的三个基本特征
面向对象的三个基本特征是:封装、继承、多态。 封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的转载 2017-06-04 11:16:12 · 467 阅读 · 0 评论 -
CreateThread 和_beginthreadex区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了转载 2017-06-04 15:00:55 · 798 阅读 · 0 评论 -
C++项目中的extern "C" {}
在用C++的项目源码中,经常会不可避免的会看到下面的代码:123456789#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus}#end转载 2017-03-22 21:07:41 · 334 阅读 · 0 评论 -
C语言中的符号重载
---------------|------------------------------------------------------------------------------------------------------------------------------- 符号 |原创 2014-03-18 21:23:07 · 1135 阅读 · 0 评论 -
C语言之switch语句详解
1.switch的一般形式switch属于多分支选择语句它的一般形式如下:switch(表达式) { case 常量表达式 1:零条或多条语句; case 常量表达式 2:零条或多条语句; default:零条或多条语句;}说明:(1)括号内的“表达式”,其值可以是整型、字符型、枚举型,不能为浮点型;原创 2014-03-18 19:11:33 · 4198 阅读 · 0 评论 -
计算的次序
在表达式中如果有布尔 操作、算术运算、位操作运算等混合运算,应该始终在适当的地方加上括号,使之清楚明了。优先级和结合性规则告诉我们哪些符号组成一个意群,但这些意群内部是如何进行计算的次序是未定义的。例如下面的表达式:x = f() + g() * h();分析: g()和h()的返回值先组成一个意群,执行乘法,但g()和h()的调用可能以任何顺序出现。(g()的调用原创 2014-03-19 10:30:56 · 1600 阅读 · 0 评论 -
分析C语言的声明
声明原创 2014-04-10 16:39:18 · 1204 阅读 · 0 评论 -
struct和union的用法
1.结构体类型 数组、结构体(struct)类型、共用体(union)类型、枚举(enumeration)类型这些类型统称用户自定义类型(user-defined type,UDT),本次介绍结构体类型。1.1声明结构体类型 在C语言中允许用户自己指定一个组合项,在一个组合项中包含若干类型的数据项,这种数据类型称为结构体。形如:struct stude原创 2014-04-09 16:35:40 · 6058 阅读 · 1 评论 -
详解typedef用法及define的区别
1.typedef语法描述 在现实生活中,信息的概念可能是长度、数量和面积等。在C语言中,信息被抽象为int、float和double等基本数据类型。从基本数据类型名称上,不能看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。为了解决用户自定义数据类型名称的需求,C 语言中引入typedef,可以为数据类型创建别名,从而丰富数据类型所包含的属性信息。原创 2014-03-28 17:26:56 · 2270 阅读 · 0 评论 -
文本段、数据段、bss段
1.a.out原创 2014-03-24 16:03:55 · 4163 阅读 · 0 评论 -
再论数组
1.什么时候数组和指针相同 在实际应用中,数组和指针可以互换的情形比不可互换的情形要更为常见,让我们分别考虑“声明”和“使用”这两种情况;数组声明可以分成3种情况: 1.外部数组的声明(external array) 2.函数定义(定义是声明的特殊情况,它分配内存空间) 3.函数参数的声明 所有作为函数参数的数组总是可以通过编译器转换为指原创 2014-03-30 20:07:13 · 1613 阅读 · 2 评论 -
数组与指针
1.数组和指针的访问1.1数组元素的访问例子:char arr[9]="abcdefgh" ......c = arr[3];//直接访问访问过程: 编译符号表具有一个地址9980,也就是数组首地址 运行时步骤1:取地址9983内容(从arr代表的地址开始,前进3步,每步一个字符)原创 2014-03-26 16:21:23 · 1146 阅读 · 0 评论 -
C语言之预处理命令
1.前沿 ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。这些预处理命令不是C语言本身的组成部分,不能直接对它们进行编译。先要对程序中的这些特殊的命令进行“预处理”,经过预处理后的程序不在包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。C提供的预处理功能主要有以下3种:1.宏定原创 2014-03-22 22:45:28 · 1937 阅读 · 0 评论 -
const指针用法总结
介绍了const和指针的用法,对其中的难点、疑点做了详细的介绍原创 2014-03-21 14:15:38 · 2002 阅读 · 0 评论 -
C语言中的小启发(陆续更新。。。)
1. NULL 、NUL 、EOF、'\0'(1) NUL,0值字符,可以用于结束ASCII字符串,和'\0'类似,但是在c/c++中没有定义,如果要使用的话需要自定义为#define NUL '\0'(2) NULL表示空指针,哪里也不指向的特殊的指针值例如:char *ptr = NULL //ptr是空指针在stdio.h中的表示是: /* Defin原创 2014-03-20 15:54:22 · 1261 阅读 · 0 评论 -
左值与右值
前言 首先注意的是"地址y"和"地址y的内容"之间的区别,这是一个相当微妙之处,因为值大多数的编程语言中我们用同一个符号来表示这两样东西,由编译器根据上下文环境判断它们的具体含义。以赋值为例子说明。分析 x = y;在这个上下文环境里,符原创 2014-03-20 11:25:44 · 1543 阅读 · 1 评论 -
sizeof()使用技巧
本文主要描述了sizeof使用特点以及使用场景原创 2016-08-03 23:11:31 · 1020 阅读 · 0 评论 -
对一些数据类型的概念说明
数据类型char原创 2014-05-20 14:45:00 · 1027 阅读 · 0 评论 -
C语言中常见的内存错误与解决方法
C语言中常见的内存错误与解决方法,并举例说明原创 2014-05-20 13:16:27 · 9867 阅读 · 3 评论