C++
文章平均质量分 72
zougangx
软件开发 Enough space... Enough performance...
QQ:283407231
MSN:zougangxx@hotmail.com
展开
-
轻松搞定C++内存泄漏
背景 C++内存分配与释放均由用户代码自行控制,灵活的机制有如潘多拉之盒,即让程序员有了更广的发挥空间,也产生了代代相传的内存泄漏问题。对于新手来说,最常犯的错误就是new出一个对象而忘记释放,对于一般小应用程序来说,一点内存空间不算什么。但是当内存泄漏问题出现在需要24小时运行的平台类程序上的时候,将会使系统可用内存飞速减少,最后耗尽系统资源,导致系统崩溃。 所以学会如何防止并检查内存泄漏转载 2008-10-29 23:29:00 · 720 阅读 · 0 评论 -
C++中函数指针数组的使用
笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。 我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数转载 2008-10-29 23:33:00 · 584 阅读 · 0 评论 -
vc中控件字体的设置
和所有初学者一样,刚开始接触新的东西,总想把画面做的漂亮些,可是在vc中很难做到,比如对话框中按钮等控件的字体设置,就颇费了我一番功夫。 一。做成一个函数,改变字体大小,方法如下: 1。在最开头声明一个全局的字体指针 CFont *my_font=new CFont();//注意初始化,不能为空 2。在需要改变字体的地方调用函数: set_font(60转载 2009-01-04 22:46:00 · 1541 阅读 · 0 评论 -
文件过滤系统驱动开发Filemon学习笔记
WINDOWS文件过滤系统驱动开发,可用于硬盘还原,防病毒,文件安全防护,文件加密等诸多领域。而掌握核心层的理论及实践,对于成为一名优秀的开发人员不可或缺。 WINDOWS文件过滤系统驱动开发的两个经典例子,Filemon与SFilter,初学者在经过一定的理论积累后,对此两个例子代码的研究分析,会是步入驱动开发殿堂的重要一步,相信一定的理论积累以及贯穿剖析理解此两个例程后,就有能力开始进行文转载 2009-03-01 22:09:00 · 460 阅读 · 0 评论 -
用拷贝钩子实现对文件夹的监控
ICopyHook是一个用于创建拷贝钩子处理程序COM接口,它决定一个文件夹或者打印机对象是否可以被移动,拷贝,重命名或删除。Shell在执行这些操作之前,会调用ICopyHook接口的CopyCallback方法对它们进行验证。CopyCallback返回一个int值指示Shell是否应该继续执行这个操作。返回值IDYES表示继续,而返回值IDNO和IDCANCEL则表示终止。一个文件夹转载 2009-03-01 22:06:00 · 689 阅读 · 0 评论 -
利用Windows外壳扩展保护文件夹
在Win32操作系统(包括Win9X、Windows NT、Windows 2000)不但有方便的图形用户(GUI)界面,微软还为windows用户界面保留了强大的可扩充性。其中对于Windows界面的操作环境(这里称为外壳Shell),微软提供了一种称为外壳扩展(Shell Extensions)的功能来实现文件系统操作的可编程性。如果你的机器中安装了Word 7.0以上的版本,当你鼠标右键单原创 2009-03-02 22:32:00 · 658 阅读 · 0 评论 -
用 C++ 创建简单的 Win32 服务程序
原文出处:Creating a Simple Win32 Service in C++下载 NTService 例子源代码下载 NTServCpl 例子源代码下载 NTServCtrl 例子源代码 摘要 本文描述如何用 Visual C++ 创建 Windows NT 服务程序。创建该服务仅用到一个 C++ 类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务非常简单,原创 2009-03-02 22:35:00 · 607 阅读 · 0 评论 -
CListCtrl 使用一
讲述的控件格式为Report风格,CListCtrl m_listctrl; 1) 设置ListCtrl的风格 //获得原有风格 DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); dwStyle &= ~(LVS_TYPEMASK); dwStyle &= ~(LVS_EDITLABELS);原创 2008-12-17 22:47:00 · 623 阅读 · 0 评论 -
AfxBeginThread
AfxBeginThread This function creates a new thread. The first form of AfxBeginThread creates a worker thread. The second form creates a user-interface thread. AfxBeginThread creates a new CWinTh转载 2008-12-17 22:45:00 · 527 阅读 · 0 评论 -
CreateThread
CreateThreadThis function creates a thread to execute within the address space of the calling process. HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD转载 2008-12-17 22:43:00 · 735 阅读 · 0 评论 -
CSemaphore
CSemaphore::CSemaphoreCSemaphore( LONG lInitialCount = 1, LONG lMaxCount = 1, LPCTSTR pstrName = NULL, LPSECURITY_ATTRIBUTES lpsaAttributes = NULL );ParameterslInitialCountThe initial usag转载 2008-12-17 22:46:00 · 743 阅读 · 0 评论 -
COM 组件设计与应用(十一)--IDispatch 及双接口的调用
下载源代码一、前言 前段时间,由于工作比较忙,没有能及时地写作。其间收到了很多网友的来信询问和鼓励,在此一并表示感谢。咳......我也需要工作来养家糊口呀...... 上回书介绍了两种方法来写自动化(IDispatch)接口的组件程序,一是用 MFC 方式编写“纯粹”的 IDispatch 接口;二是用 ATL 方式编写“双接口”的组件。 二、IDispatch 接口和转载 2009-03-16 21:59:00 · 331 阅读 · 0 评论 -
COM组件设计与应用(十二)--错误与异常处理
下载源代码一、前言 程序设计中,错误处理必不可少,而且通常要占用很大的篇幅。本回书着落在 COM 中的错误(异常)的处理方法。 在组件程序中,如果遇到错误,一般有两个方式进行处理。二、简单返回 对于比较简单的错误,直接返回表示错误原因的 HRESULT。比如下面几个就是常见的错误值: E_INVALIDARG0x80070057参数错误E_OUTO转载 2009-03-16 22:00:00 · 543 阅读 · 0 评论 -
COM组件设计与应用(十六)--连接点(vc.net)
下载源代码一、前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。二、原理图一、连接点组件原理图。左侧为客户端,右侧为服务端(组件对象) 看着好复杂呀......呵呵,其实简单的紧:(注1)1、一个 COM 组件,允许有多个连接点对象(IConnectionPoint)。 也就是说可以有多个发生“事件”的源头。上图就有3个连接点;2、管理这些连接点的接口叫“连接点容器”转载 2009-03-16 22:02:00 · 464 阅读 · 0 评论 -
COM线程模型
COM线程模型 线程模型是一种数学模型,专门针对多线程编程而提供的算法,但也仅是算法,不是实现。本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的,就像说明Windows是如何实现线程这个数学模型的一样,最后指明一下跨套间调用和各种类型套间编写的要求以帮助理解。希望读者对于Windows操作系统的线程这个概念相当熟悉,对何谓“线程安全的”亦非转载 2009-03-16 22:05:00 · 433 阅读 · 0 评论 -
COM 组件设计与应用(一)--起源及复合文件
一、前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思:“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2)。功夫不负有心人,终于买到了我的第一本COM书《OLE2高级编程转载 2009-03-16 21:50:00 · 1349 阅读 · 0 评论 -
COM组件设计与应用(二)--GUID 和 接口
一、前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入、解析、显示 xls数据呢?二、CLSID 概念 有一个非常简单的解决方案,那就是在对象数据的前面,保存有转载 2009-03-16 21:51:00 · 346 阅读 · 0 评论 -
COM组件设计与应用(三)--数据类型
一、前言 上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM中的数据类型。咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:“饭要一口一口地吃”;老子语:“心急吃不了热豆腐”,孙子云:“走一步看一步吧” ...... 先掌握必要的知识,将来写起程序来才会得心应手也:-) 走入正题之前,请大家牢牢记住一条原则:COM 组件是运行在转载 2009-03-16 21:52:00 · 428 阅读 · 0 评论 -
COM组件设计与应用(四)--简单调用组件
一、前言 同志们、朋友们、各位领导,大家好。 VCKBASE 不得了, 网友众多文章好。 组件设计怎么学? 知识库里闷头找! 摘自---杨老师打油集录 在 VCKBASE 的顶力支持下,在各位网友回帖的鼓励下,我才能顺利完成系列论文的前三回。书到本回,我们终转载 2009-03-16 21:53:00 · 332 阅读 · 0 评论 -
COM 组件设计与应用(五)--用 ATL 写第一个组件
下载源代码一、前言 1、如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003; 2、如果你在使用 vc6.0 (ATL 3.0)请阅读本回内容; 3、如果你在使用 vc.net(ATL 7.0)请阅读下回内容;(当然读读本文内容也不错) 4、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它转载 2009-03-16 21:54:00 · 341 阅读 · 1 评论 -
COM 组件设计与应用(六)--用 ATL 写第一个组件
下载源代码一、前言 1、与 《COM 组件设计与应用(五)》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对。 2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。 3、下面.转载 2009-03-16 21:55:00 · 364 阅读 · 0 评论 -
COM 组件设计与应用(七)--编译、注册、调用
一、前言 上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译、注册和调用方法。示例程序你已经下载了吗?如果还没有下载,vc6.0 的用户点这里,vc.net 的用户点这里。二、关于编译 2-1 最小依赖 “最小依赖”,表示编译器会把 ATL中必须使用的一些函数静态连接到目标程序中。这样目标文件尺寸会稍大,但独立性更强,安装方便;反之系统执行的时候需要有转载 2009-03-16 21:56:00 · 335 阅读 · 0 评论 -
COM组件设计与应用(八)--实现多接口
下载源代码一、前言 从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口IFun。当然如果想偷懒的话,我们可以把 200 个函数都加到这一个接口中,果真如此的话,恐怕就没有人喜欢使用我们这个组件了。一个组件既然可以提供多个接口,那么我们在设计的时候,就应该按照函数的功能进行分类,把不同功能转载 2009-03-16 21:57:00 · 338 阅读 · 0 评论 -
COM组件设计与应用(九)--IDispatch 接口 for vc6.0
下载源代码一、前言 终于写到了第九回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用、非常有用、非常精彩的一个 COM功能。由于 WORD、EXCEL 等 OFFICE 软件提供了“宏”的功能,就连我们使用的VC开发环境也提供了“宏”功能,更由于HTML、ASP、JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性。转载 2009-03-16 21:57:00 · 542 阅读 · 0 评论 -
COM组件设计与应用(十)--IDispatch 接口 for vc.net
下载源代码一、前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用、非常有用、非常精彩的一个 COM功能。由于 WORD、EXCEL 等 OFFICE 软件提供了“宏”的功能,就连我们使用的VC开发环境也提供了“宏”功能,更由于HTML、ASP、JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性。转载 2009-03-16 21:58:00 · 421 阅读 · 0 评论 -
COM组件设计与应用(十三)--事件和通知(VC6.0)
下载源代码一、前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者; 我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者; 我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者; ... ... ... ... 本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(共四转载 2009-03-16 22:00:00 · 458 阅读 · 0 评论 -
COM组件设计与应用(十四)--事件和通知(vc.net)
下载源代码一、前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者; 我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者; 我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者; ... ... ... ... 本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(共四转载 2009-03-16 22:01:00 · 372 阅读 · 0 评论 -
COM组件设计与应用(十五)--连接点(vc6.0)
下载源代码一、前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。二、原理图一、连接点组件原理图。左侧为客户端,右侧为服务端(组件对象) 看着好复杂呀......呵呵,其实简单的紧:(注1)1、一个 COM 组件,允许有多个连接点对象(IConnectionPoint)。 也就是说可以有多个发生“事件”的源头。上图就有3个连接点;2、管理这些连接点的接口叫“连接点容器”转载 2009-03-16 22:01:00 · 614 阅读 · 0 评论 -
COM 组件设计与应用(十七)——持续性
下载源代码一、前言 我们写程序,经常需要实现这样的需求:例一、程序运行产生一个窗口,用户关闭的时候需要记录窗口的位置,以便下次运行时保持位置不变;例二、由于程序运行时间很长,今天执行一部分,明天继续执行。那么在下次运行前要恢复前次的状态;... ... ... ...智慧的老师:以上这些需求,如何实现呢?懵懂的学生:这个简单,只要在程序退出前提取必要的信息保存到文件中,下次运行时再从文件中转载 2009-03-16 22:02:00 · 310 阅读 · 0 评论 -
COM组件设计与应用(十八)——属性包
下载源代码一、前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式。属性包,是以“名称 -值”的方式提供组件持续性的支持,而“名称 - 值”恰恰又适合于用文本方式来表现。下面的片段是在 HTML 中插入 MicrosoftMonthView Control ActiveX 控件后的样式: 以文本方式保存组转载 2009-03-16 22:03:00 · 471 阅读 · 0 评论 -
Unicode编程
下载源代码一、什么是Unicode 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H—7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H—FFH)转载 2009-03-16 22:04:00 · 487 阅读 · 0 评论 -
COM组件中的线程模式
提及COM的线程模式,实际上指的是两个方面,一个是客户程序的线程模式,一个是组件所支持的线程模式。客户程序的线程模式只有两种,单线程公寓(STA)和多线程公寓(MTA)。组件所支持的线程模式有四种:Single(单线程)、Apartment(STA)、Free(MTA)、Both(STA+MTA)。 1、公寓只是个逻辑上的概念。一个STA只能包含一个线程,一个MTA可以包含多个转载 2009-03-16 22:06:00 · 378 阅读 · 0 评论 -
C++内存泄漏
C++内存分配与释放均由用户代码自行控制,灵活的机制有如潘多拉之盒,即让程序员有了更广的发挥空间,也产生了代代相传的内存泄漏问题。对于新手来说,最常犯的错误就是new出一个对象而忘记释放,对于一般小应用程序来说,一点内存空间不算什么。但是当内存泄漏问题出现在需要24小时运行的平台类程序上的时候,将会使系统可用内存飞速减少,最后耗尽系统资源,导致系统崩溃。 所以学会如何防止并检查内存泄漏,转载 2009-04-07 23:01:00 · 483 阅读 · 0 评论 -
Bjarne:如何对付内存泄漏?
写出那些不会导致任何内存泄漏的代码。很明显,当你的代码中到处充满了new 操作、delete操作和指针运算的话,你将会在某个地方搞晕了头,导致内存泄漏,指针引用错误,以及诸如此类的问题。这和你如何小心地对待内存分配工作其实完全没有关系:代码的复杂性最终总是会超过你能够付出的时间和努力。于是随后产生了一些成功的技巧,它们依赖于将内存分配(allocations)与重新分配(de转载 2009-04-07 23:12:00 · 415 阅读 · 0 评论 -
透明位图原理及代码
(半) 透明位图原理及代码 摘自http://www.bc99.cn/Article/ASPX/2007-3-27-cs/65D5KI8EJFGK.html>> 绘制半透明位图 有的时侯,我们希望显示一幅半透明的位图。也就是说我们将一幅位图B显示到A位图上,又希望透过B位图看到A位图的一部分图像但不是全部。比如A位图是一幅曲线图,B是一幅提示位图,我们想在显示提示的同时看到已显示的曲线转载 2009-05-06 23:33:00 · 767 阅读 · 0 评论 -
#Pragma Para
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常原创 2009-05-10 22:10:00 · 397 阅读 · 0 评论 -
指针与引用
摘自「高质量c++编程」 指针与引用,在More Effective C++ 的条款一有详细讲述,我给你转过来 条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符‘*’和‘->’,引用使用操作符‘。’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下转载 2009-08-13 23:26:00 · 356 阅读 · 0 评论 -
探讨虚函数(一)
虚函数是C++中非常重要的一个特性,要熟练的掌握好C++的几大特性,虚函数的相关知识必不可少,下面就来分析一下虚函数表的结构, class CBase{public: virtual void f1(){cout virtual void f2(){cout virtual void f3(){cout}; 类CBase中定义了3个虚成员函数, typedef void (原创 2009-08-14 23:55:00 · 461 阅读 · 0 评论 -
Why is the size of an empty class not zero?
Why is the size of an empty class not zero?To ensure that the addresses of two different objects will be different.For the same reason, "new" always returns pointers to distinct objects.转载 2009-08-18 23:01:00 · 520 阅读 · 0 评论 -
slicing
"Slicing"is where you assign an object of a derived class to an instance of abase class, thereby losing part of the information - some of it is"sliced" away.For example, class A {原创 2009-08-18 23:19:00 · 534 阅读 · 0 评论