
VC学习之路
文章平均质量分 86
滴水梵音
程序人生
展开
-
消息分流器
消息分流器定义在MicrosoftVisual C++中提供的Wi n d o w s X . h文件里。通常在Wi n d o w s . h文件之后紧接着包含这个文件。Wi n d o w s X . h文件就是一组# d e f i n e指令,建立了一组供我们使用的宏。Wi n d o w s X . h的宏实际上分为三组:消息分流器、子控件宏和A P I宏。这里只关注消息分流器,它使原创 2013-01-29 15:51:28 · 546 阅读 · 0 评论 -
线程的内部机制
1.线程的组成 (1)线程内核对象:用于管理线程及存储线程的统计信息 (2)线程栈:维护线程执行时需要的函数参数和局部变量。 线程栈所需的内存是从进程中分配而得的,其大小默认是1M. 每个线程都有自已独立的线程栈。 进程不执行任何代码,所有的代码都是由线程执行的。进程转载 2013-09-22 13:45:07 · 593 阅读 · 0 评论 -
__declspec(dllexport) & __declspec(dllimport)
__declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中 省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类__declspec(dllimport)声明一个导入函数,是说这个函数是从别的DL转载 2013-10-09 13:16:05 · 493 阅读 · 0 评论 -
SetProcessWorkingSetSize 和内存释放
关于 SetProcessWorkingSetSize 和内存释放在应用程序中,往往为了释放内存等,使用一些函数,其实,对于内存操作函数要谨慎使用,比如大家常常想到的 SetProcessWorkingSetSize,其实对于windows来说,系统会自动在程序闲置时(如程序被最小化)释放内存的,自己用内存释放 时,往往会造成一些莫名的内存错误,造成自己的应用程序及系统不稳定。具体原理有人已经写得转载 2013-09-24 12:16:23 · 1603 阅读 · 0 评论 -
控制台输入输出重定向
AllocConsole()和AttachConsole()一般来讲GUI程序不能使用STDIN和STDOUT,但是有时有些特殊需要,希望GUI程序也有控制台,如:一个程序,既可以以GUI方式运行,又可以如果用户在控制台里打程序名的话,就以控制台程序的方式运行。通过AllocConsole() 和 AttachConsole() 这两个WIN API就能实现上面的需求。这两个API分别转载 2013-11-05 14:40:25 · 1098 阅读 · 0 评论 -
VC文件扩展名解读大全
VC文件扩展名解读大全 .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。资源辅助文件。.BMP:位图资源文件。.BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。用于浏览项目信息的,如果用source brower的话转载 2013-11-28 09:46:04 · 533 阅读 · 0 评论 -
vc dll依赖性查看工具depends
vc dll依赖性查看工具depends在 vs 2008中没有这个工具了,要自己下载:http://www.dependencywalker.com/Depends用来显示与一个可执行文件(exe或者dll)相关的依赖项(dll),以及该exe或dll引用了这些dll中的哪些接口。同时也可以看到每个被依赖的dll中的所有导出的函数接口。====================转载 2013-11-28 09:52:36 · 1441 阅读 · 0 评论 -
基于Cookie的安全检查机制
Buffer Overrun定义 buffer是程序用来存储数据的连续内存区域,一旦分配完成,其起始地址和大小便固定下来。程序运行过程中,如果使用了超出buffer的区域,那么就发生了buffer overflow(缓冲区溢出)或者buffer overrun(缓冲区越界)。如果该缓冲区分配在stack上,就称之为stack buffer overrun;如果分配在heap,就称转载 2014-05-12 17:11:36 · 729 阅读 · 0 评论 -
利用VS2005进行dump文件调试
利用VS2005进行dump文件调试分类: Exception、Error 2009-07-14 17:04 6621人阅读 评论(1)收藏 举报dllapplicationexedatabaseexception数据库前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件。使用VS2005打开生成的DMP文件,能很方便的转载 2014-05-12 20:25:10 · 570 阅读 · 0 评论 -
浅议 Dynamic_cast 和 RTTI
浅议 Dynamic_cast 和 RTTI写这篇博文的目的是,记录学习过程。对于问题要较真,在解决这个问题中会学到很多,远远超过自己期望,锻炼思维,享受这个过程。问题: Static_cast 与 Dynamic_cast的区别来自书本上的解释: 用 static_cast ( expression ) 1. static_cast(expression) T转载 2014-05-20 13:12:35 · 964 阅读 · 0 评论 -
在类的成员函数中调用delete this
在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码。假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和虚转载 2014-05-14 14:29:53 · 485 阅读 · 0 评论 -
将32位代码向64位平台移植的注意事项
新近的64位平台在二进制上与32位应用程序兼容,这意味着可以非常简单地移植现有的程序。许多目前在32位平台上运行良好的程序也许不必移植,除非程序有以下要求:·需要多于4GB的内存。·使用的文件大小常大于2GB。·密集浮点运算,需要利用64位架构的优势。·能从64位平台的优化数学库中受益。否则,只需简单地重新编译一下,就已经足够了。大多数编写良好的程序不费吹灰之力就可移植到64位转载 2014-06-24 20:21:11 · 641 阅读 · 0 评论 -
32位程序使用超过4G的内存
32位程序使用超过4G的内存众所周知,所有的32位应用程序都有4GB的进程地址空间,因为32位地址最多可以映射4GB的内存。对于Microsoft Windows操作系统,应用程序可以访问2GB的进程地址空间(32位Linux可以访问3GB地址空间),这就是称为用户模式的虚拟地址空间。这2GB的用户模式虚拟地址空间位于4GB地址空间的低一半,而与之相对应的高一半2GB地址空间由操作系统转载 2014-06-27 10:26:09 · 1168 阅读 · 0 评论 -
线程安全和可重入
线程安全和可重入 线程安全: 线程安全函数:在C语言中局部变量是在栈中分配的,任何未使用静态数据或其他共享资源的函数都是线程安全的。 使用全局变量的函数是非线程安全的。 使用静态数据或其他共享资源的函数,必须通过加锁的方式来使函数实现线程安全。 线程安转载 2014-07-15 13:25:50 · 498 阅读 · 0 评论 -
VC内存泄漏检查
内存管理:_CrtDumpMemoryLeaks内存查看方法:头文件加入:#include #define _CRTDBG_MAP_ALLOC#define USING_LEAK_CHECK 1 #ifndef _crtdbg_map_alloc #define _crtdbg_map_alloc #endif #include转载 2014-08-23 10:41:24 · 575 阅读 · 0 评论 -
UNREFERENCED_PARAMETER的作用
UNREFERENCED_PARAMETER 的作用2007年06月16日 星期六 14:38我们从 UNREFERENCED_PARAMETER 开始吧。这个宏在 winnt.h 中定义如下: #define UNREFERENCED_PARAMETER(P) (P) 换句话说 UNREFERENCED_PARAMETER 展开传递的参数或表达式。其目的是避免编译器关于未引用参转载 2013-09-30 15:36:57 · 569 阅读 · 0 评论 -
深入分析Sleep(0)与Sleep(1)的区别
深入分析Sleep(0)与Sleep(1)的区别分类: Windows C/C++ 2012-10-11 20:08 1371人阅读 评论(0)收藏 举报api深入分析Sleep(0)与Sleep(1)的区别罗朝辉 (http://blog.youkuaiyun.com/kesalin)CC许可,转载请注明出处目的:有时候我们想让转载 2013-09-29 17:13:50 · 658 阅读 · 0 评论 -
定义自己的错误代码
可以通过了解Windows的各个函数的错误处理机制,可以定义自己的错误代码。一个Wi n d o w s 函数返回的错误代码对了解该函数为什么会运行失败常常很有用。M i c r o s o f t公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个3 2 位的号码。从系统内部来讲,当一个Win d o w s 函数检测到一个错误时,它会使用一个称为线程本地存储器(thre原创 2013-01-29 15:53:17 · 488 阅读 · 0 评论 -
禁止使用拷贝构造函数和赋值函数操作的宏定义
#defineDISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); void operator=(const TypeName&) 使用方法:class Foo{ public: explicit Foo(int f); privat原创 2013-01-29 15:54:53 · 585 阅读 · 0 评论 -
定义将来可能改变容器类型的方法
不要这么写:class Widget {...};vector vw;Widget bestWidget;... // 给bestWidget一个值vector::iterator i = // 寻找和bestWidget相等的Widget find(vw.begin(),原创 2013-01-29 15:55:36 · 317 阅读 · 0 评论 -
WinDbg使用介绍
WinDbg使用介绍 拥有一个顺手的武器是每一个武林高手梦寐以求的。对于windows程序员来说,WinDbg调试器就是我们的武器。熟练使用调试器能大大提高我们的调试能力。本博文将详细介绍涉及到WinDbg调试器的基本使用方法以及在实际调试过程中经常使用到得各种命令和技巧。 WinDbg是一个功能非常强大的调试器。它支持多种调试任务,如用户态调试、内核态调试、转储文件调试和远程调转载 2013-03-08 10:05:27 · 1116 阅读 · 0 评论 -
#pragma 的用法
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 常用参数 1.message 参数 2.code_seg 3.#pra转载 2013-03-08 10:07:22 · 497 阅读 · 0 评论 -
PE文件详解
考数据书籍:《加密与解密(第三版)》 看雪论坛PE文件学习笔记整理:自己学习PE文件的一个总结,只是一个起步,对PE文件的概念的一个学习吧,属于比较菜的阶段,学习完这一部分之后就要先放下一段时间来做更正要的事情了。PE文件之后的应用之后再慢慢的学习吧。希望可以给我同时也给你们带来一些帮助。图是来自己截的图,有书上的,有自己实际操作的。如果需要的话可以Q我我发给你,包括这个word。转载 2013-03-08 10:17:23 · 895 阅读 · 0 评论 -
Debug与Release版本的区别详解
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(转载 2013-03-08 10:41:09 · 511 阅读 · 0 评论 -
VS2005 中error C2440: 如无法从“const char [N]”转换为“LPCWSTR” 的一点总结
一般出现这种BUG 的,是由于字符集的问题。在vs2005中有两个字符集,Unicode 和 Muti-bye。 LPCTSTR在Multi-byte Character方式下与const char*等价,在Unicode方式下与const tchar*等价。所以在Unicode方式下对其赋值像下面这样:LPCTSTR location = _T("Software//");//加_T转载 2013-03-19 10:31:08 · 574 阅读 · 0 评论 -
无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用这个问题表明你新建的是一个main类型函数(控制台程序),而你的程序中有窗口程序,显然是个win32函数,解决方法:项目-属性-链接器-系统-子系统-把控制台该为windows刚学WinAPI编译遇到不少问题,LNK2019: 无法解析的外部符号 _main,该符号在转载 2013-03-19 10:44:06 · 4294 阅读 · 0 评论 -
CloseHandle(),TerminateThread(),ExitThread()的区别
CloseHandle(),TerminateThread(),ExitThread()的区别线程的handle用处:线程的handle是指向“线程的内核对象”的,而不是指向线程本身.每个内核对象只是内核分配的一个内存块,并且只能由内核访问。该内存块是一种数据结构,它的成员负责维护对象的各种信息(eg: 安全性描述,引用计数等)。CloseHandle()在Crea转载 2013-03-27 15:01:43 · 523 阅读 · 0 评论 -
内存分析和优化总结
这段时间一直在做内存分析和优化相关的工作。几点感悟,在此记录下,欢迎有经验人士共同探讨。一。有关tcmalloc tcmalloc是google出的好东西,不了解的话自行google之。他的最显著作用是提升速度,内部的缓存机制做得相当了得。副作用是,加大了内存占用,而且会隐藏了代码中潜在的bug。用和不用,无非是对空间和时间的权衡取舍。优化内存使用是必然的,但不要等价于节省了程序内存占用。转载 2013-08-23 11:12:36 · 646 阅读 · 0 评论 -
关于调用约定(cdecl、fastcall、、thiscall) 的一点知识
函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。 函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行转载 2013-08-16 09:33:34 · 570 阅读 · 0 评论 -
计算机编码大全
原作不祥从基础的开始 最小的单元是位(bit),接着是字节(Byte),一个字节=8位,英语表示是1 byte=8 bits 。机器语言的单位Byte。接着是KB,1 KB=1024 Byte; 接着是MB,1 MB=1024 KB; 接着是GB,1 GB=1024 MB ;接着是TB, 1TB=1024 GB。 接着是进制:二进制0和1,8进制0-7, 十进制不用说,转载 2013-08-16 09:34:53 · 1003 阅读 · 0 评论 -
匈牙利命名规范
匈牙利命名规范几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这转载 2013-08-16 09:21:38 · 610 阅读 · 0 评论 -
关于Debug和Release之本质区别的讨论
关于Debug和Release之本质区别的讨论一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下转载 2014-09-22 11:47:18 · 454 阅读 · 0 评论