C++编程
文章平均质量分 63
zhu2695
Coding life....
展开
-
使用OutputDebugString帮助调试
前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugString函数,通过它,可以在在DEBUG或RELEASE情况也可以输出调试日志,从而对那些要求编译为RELEASE的程序可以方便的调试。OutputDebugString的函数原型:void OutputDebugString(原创 2016-07-26 15:11:14 · 2324 阅读 · 0 评论 -
C++ 运行 快捷方式
#include #include #include using namespace std;int main(int argc, char* argv[]){ try { Sleep(1000); HINSTANCE ret = ShellExecute(NULL,"open","D:/PowerPoint/资源.lnk",NULL,"",SW_SHOWNORMAL);/原创 2013-09-03 22:26:38 · 2991 阅读 · 0 评论 -
VC++程序提升管理员权限
程序的权限不够,应用管理员权限打开程序运行方可。如何使vc程序运行时请求管理员权限?如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译 这样你的程序直接运行就拥有管理员权限了。 /*****************************转载 2013-09-02 14:04:21 · 2829 阅读 · 0 评论 -
C++文件读写(打开方式等)
要求:掌握文本文件读写的方法了解二进制文件的读写方法C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include#includevoid main(){ ofstream f1("d:\\me.txt"转载 2013-09-02 11:28:15 · 2448 阅读 · 0 评论 -
C++ DLL 导出函数名
http://www.cnblogs.com/fishseewa ... /10/05/1844292.html经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。VC++支持两种语言:即C/C++,这也是造成DLL导出函数差异的根源我们用VS2008新建个转载 2013-07-08 23:07:38 · 2195 阅读 · 0 评论 -
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1 std::list List; std::lis转载 2013-05-04 12:29:12 · 700 阅读 · 0 评论 -
C/C++ 数据范围
C/C++ 数据范围速查表char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295转载 2013-05-02 17:25:10 · 686 阅读 · 0 评论 -
C++ 静态库 与 动态库 的区别
参考一:静态库和动态库的区别静态库:在编译的时候加载生成目标文件,在运行时不用加载库,在运行时对库没有依赖性。动态库:在目标文件运行时加载,手动加载,且对库有依赖性。 两者区别: 一,静态库的使用需要: 1 包含一个对应的头文件告知编译器lib文件里面的具体内容 2 设置lib文件允许编译器去查找已经编译好的二进制代码 二,动态库的使用: 程转载 2013-04-23 00:16:31 · 3321 阅读 · 0 评论 -
DllMain函数详解
1.1 DllMain简介跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。以“DllMain”为关键字,来看看MSDN帮助文档怎么介绍这个函数的。The DllMain function is an optional method of entry into a dynamic-link library (DLL)。(简要翻译:对于一个Dl转载 2013-03-07 14:50:50 · 2097 阅读 · 0 评论 -
FunctionObject_函数对象
函数对象: (主要用途是用来搭配STL算法)(1)函数对象:是一个重载了operator()的对象。例如:class FunctionObjectType{void operator() (){statements;}}这样定义的优势:*函数对象比一般函数更灵巧,因为它可以拥有状态。*每个函原创 2013-03-03 16:34:19 · 428 阅读 · 0 评论 -
RAII
1.什么是RAII ?RAII 的全称是“Resource Acquire Is Initial”。这是C++创始人Bjarne Stroustrup发明的词汇,比较令人费解。说起来,RAII的含义倒也不算复杂。用白话说就是:在类的构造函数中分配资源,在析构函数中释放资源。这样,当一个对象创建的时候,构造函数会自动地被调用;而当这个对象被释放的时候,析构函数也会被自动调用。于是乎,一个对象的生原创 2013-03-26 11:20:33 · 1351 阅读 · 0 评论 -
"尾随数据"
//DataSource.h#ifndef _DATASOURCE_H#define _DATASOURCE_Hstruct tagData{ int nID; double dValue; char szRef[128];};void ProvideDataSource(tagData* data){ static int id = 0; data->nID =原创 2013-03-25 17:23:27 · 739 阅读 · 0 评论 -
SleepEx
函数原型:DWORD WINAPI SleepEx(DWORD dwMilliseconds,BOOL bAlertable);说明:SleepEx函数中止当前线程运行直到指定的条件被触发。当以下任意一点出现时,当前线程将恢复运行。● I/O回调函数被调用● Asynchronous Procedure Call(APC)异步函数被插入线程● 当前线程休眠时间超过最小超时值原创 2013-03-24 21:24:14 · 3387 阅读 · 0 评论 -
C++ assert机制
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。原型定义:#include assert.h>void assert( int expr转载 2013-09-30 10:13:14 · 925 阅读 · 0 评论 -
“/r/n”回车与换行
参考一:在Windows中:'/r' 回车,回到当前行的行首,而不会换到下一行;'/n' 换行,换到当前位置的下一行,而不会回到行首;回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。 在计算机还没有出现之 前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的转载 2013-09-30 11:18:54 · 1421 阅读 · 0 评论 -
C++读写txt文件
C++中Txt文件读取和写入一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是转载 2013-09-25 22:18:15 · 4716 阅读 · 0 评论 -
基于Mysql Connector(C++)的数据库连接池的实现
1.连接池的介绍:1.1应用背景:一般的应用程序都会访问到数据库,在程序访问数据库的时候,每一次数据访问请求都必须经过下面几个步骤:建立数据库连接,打开数据库,对数据库中的数据进行操作,关闭数据库连接。而建立数据库连接和打开数据库是一件很消耗资源并且费时的工作,如果在系统中很频繁的发生这种数据库连接,必然会影响到系统的性能,甚至会导致系统的崩溃。1.2技术思想:在系转载 2016-06-03 01:02:33 · 2095 阅读 · 0 评论 -
C++中四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中能够找到更加周详的解释 1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。原创 2016-04-14 01:23:09 · 6756 阅读 · 1 评论 -
VC6.0给控制台程序exe文件添加icon图标
(1)插入图标文件并保存为.rc文件插入—>资源—>ICon,引入,选择.ico图标文件,确定,然后点击保存按钮将图标保存为.rc文件,例如(ico.rc)(2)添加rc文件到工作空间并编译程序切换到FileView,右击"文件名files",选择添加文件到工程,定位到刚创建的ico.rc文件,确定,此时工作空间中会多出一个ico.rc资源(3)编译,debug文件夹中exe文件图原创 2013-12-21 22:22:57 · 2762 阅读 · 0 评论 -
巧用VC工程下的rc文件
一 利用rc文件进行界面的布局 打开一个资源文件,如FHRDemo.rc,右键选择查看代码,可以看到文本描述的资源文件,这里截取其中的一段。// Dialog//IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAP转载 2013-12-19 09:10:53 · 1653 阅读 · 0 评论 -
也谈C++中char*与wchar_t*之间的转换
关于C++中的char*与wchar_t*这两种类型的相互转换,网上说的大多很繁琐,可行性也不高。下面这个方法是在MSDN里面找到的,个人认为还比较不错: 把char*转换为wchar_t*用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert";size_t l转载 2013-11-26 16:51:07 · 1442 阅读 · 0 评论 -
C++的深拷贝与浅拷贝
参考一:本文的所有内容均来自http://www.cnblogs.com/BlueTzar/articles/1223313.html,感谢此作者:) 对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2013-11-22 09:32:08 · 829 阅读 · 0 评论 -
在C++里执行VBS
#includeusing namespace std;int main() { fstream out("StartIE.vbs",ios::out); out<<"AppName=\"启动IE\"\n\ Set Wshell=WScript.CreateObject(\"WScript.Shell\")\n\ Set ie=WScript.CreateObject(\"I原创 2013-10-31 13:08:41 · 4722 阅读 · 0 评论 -
C++中如何处理含有空格的文件路径
函数在传入参数时,需要传入文件路径,当文件路径中含有空格时,该如何处理?在程序中需要调用一个exe程序,传入参数为文件的路径,是以命令行的形式传入参数,当文件的路径中包含空格时,需要将该路径用双引号括起来,具体代码如下:正常情况下是:CString strCmd;strCmd.Format(_T("%s %s \"\""), SrcFile,DestFile)转载 2013-10-27 08:55:37 · 6286 阅读 · 0 评论 -
C++获取windows特殊文件夹路径
// VC++得到系统特殊文件夹路径#include #include #include int main(){ printf(" VC++获取windows特殊文件夹路径 \n"); //const int MAXN = 9; const int MAXN = 6; int nArrCSIDL[] = { //CSIDL_WINDOWS, //CSIDL_SYS原创 2013-10-26 20:06:32 · 2361 阅读 · 0 评论 -
C++程序实现自我复制
#include #include #include "tchar.h"using namespace std;void CopyMyselfTo(LPCTSTR targetPath){ TCHAR tcBuf[_MAX_PATH]; // 缓冲区 // 取自己程序的程序名 ::GetModuleFileName(NULL, tcBuf, sizeof(tcBuf));原创 2013-10-25 23:32:06 · 4431 阅读 · 2 评论 -
一个类中定义的枚举,怎么传递到另一个不相关的类里?
一个类中定义的枚举,怎么传递到另一个不相关的类里?只看楼主收藏回复亮出24CM9快速升级神器请看下面这段代码:class tA{public: enum tE{i_0,i_1,};void cShow()转载 2013-10-25 10:46:15 · 4644 阅读 · 0 评论 -
C++执行外部程序(调用外部exe程序)
参考一:1.使用system函数system("xxx.exe参数1参数2 参数3...)chars[300];char*filename = "*****";sprintf_s(s,"%s %s %s %s","....**.exe", "aa", "bb",filename);system(s);system 的一般格式为:syste转载 2013-09-28 16:25:42 · 50013 阅读 · 0 评论 -
MAKEWORD
MAKEWORD 宏 平台:SDK 这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。 (注:typedef unsigned short WORD;) WORD MAKEWORD( BYTE bLow, //指定新变量的低字节序; BYTE bHigh //指定新变量的高字节序; ); 例如: W原创 2013-03-24 18:00:46 · 1505 阅读 · 0 评论 -
ZeroMemory、memset和 “={0}” 的区别
ZeroMemory和memset的区别:1、ZeroMemory是微软的SDK提供的,memset是属于C Run-time Library提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用 memset实现的,而memset除了对内存进行清零操作,还可以将内存置成别原创 2013-03-24 10:51:58 · 1093 阅读 · 0 评论 -
c++内存中字节对齐问题详解
c++内存中字节对齐问题详解 一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台转载 2013-03-02 19:30:26 · 381 阅读 · 0 评论 -
C++ union 详解&实例
C++中union的使用联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该转载 2013-03-02 19:15:28 · 4439 阅读 · 0 评论 -
C++ const使用详解
C++ const使用详解 一 const基础 如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500; const int* a = &b; [1] int const *a = &b; [2] int* const a = &b; [3] const int* const a = &b; [4]转载 2013-03-02 15:26:50 · 478 阅读 · 0 评论 -
关于strncpy
原型:char * strncpy(char *dest, char *src, size_t n); 功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是直到复制完第n个字符才停止,不管途中是否遇到了NULL,即在n个字符内会连同NULL一起复制),返回指向dest的指针。 头文件:#include "string.原创 2013-03-02 16:11:59 · 434 阅读 · 0 评论 -
纯虚函数能为private吗?
纯虚函数能为private吗?我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚函数可以为private吗?如果这种方式是可行的,那么什么时候可以将(纯)虚函数设为private了?这些都是转载 2013-03-09 16:21:08 · 898 阅读 · 0 评论 -
避免构造/析构函数调用虚函数
不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C++与其它语言的大区别之一。 假设你有一个为股票交易建模的类层次结构,例如买单,卖单,等等。为该类交易建立审计系统是非常重要的,这样的话,每当创建一个交易对象,在审计登录项上就生成一个适当的入口项。这看上去不失为一种解决该原创 2013-03-09 14:09:57 · 612 阅读 · 0 评论 -
C++中禁止类被继承的方法
[转]C++中禁止类被继承的方法学过C++,看过一些C++书籍的人一般都知道怎么防止一个类被构造初始化,被赋值等等,它们的思想都一样,就是把相应的操作放到private区域中。现在,给大家介绍一种防止一个类被继承的方法,很巧妙~~要防止一个类被继承,我们的目标就是如果这个类被继承,那么编译的时候就会出错,要是现这个目标,我们必须利用语言的一些特性,使得继承的类在编译时 C++需要为转载 2013-03-07 12:03:43 · 2176 阅读 · 0 评论 -
C++ main函数里的exit与return的区别
1 #include iostream> 2 using namespace std; 3 class Temp 4 { 5 public: 6 Temp(){cout"Constructor!"endl;} 7 ~Temp(){cout"Destructor!"endl;} 8 }; 9 int main()10 { 11 Te原创 2013-03-06 20:53:21 · 1872 阅读 · 2 评论 -
Windows Socket五种I/O模型
Windows Socket五种I/O模型Winsock 的I/O操作:1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDB转载 2013-03-06 20:05:01 · 816 阅读 · 0 评论 -
悲观程序员的五件武器(转)
悲观程序员的五件武器(转)http://blog.gkong.com/more.asp?name=linkman&id=27854我不知道,自己现在还算不算一个程序员。如果还算程序员的话,我肯定不是那种绝顶聪明的程序员。我不是一个聪明的程序员,不能在键盘上手指翻飞,灵光似剑,一日千行,闭目成章。大师的高度,远非我能指望,我会犯很多错误,只是一个普通的程序员。所以,对于编程,转载 2013-03-06 19:30:08 · 648 阅读 · 0 评论