自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

转载 VC++动态链接库编程之基础概念

1.概论先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的

2010-12-30 22:15:00 430

转载 DLL(Dynamic Link Libraries)专题

<br /> 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EXE程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测

2010-12-22 11:51:00 480

原创 大话设计模式学习(十五)——单例模式

单例模式单例模式(singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点通常我们可以让一个全局变量使得仅有一个对象被访问,但他不能防止你实例化多个对象,一个最好的办法是,让类对象自身负责保存他的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法Singleton类,定义一个GetInstance操作,允许客户访问他的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例class CSingleton{public: //获

2010-12-13 22:17:00 1266

原创 大话设计模式学习(十四)——组合模式

<br /> 组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性<br /><br /> <br /> <br />Component为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件<br />class Component {public: Component(CString name) { strName=name; }

2010-11-21 16:57:00 1164

原创 大话设计模式(十三)——备忘录模式

<br /> <br />备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的状态的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态<br /><br /> <br />Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态<br />Memento(备忘录):负责存储Originator对象的内部状态,并可防

2010-11-07 14:59:00 661

原创 大话设计模式学习(十二)——状态模式

<br />状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 <br />状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑化<br /> <br /> <br />State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。<br />#include "Context.h"#include <iostream>using namespac

2010-11-01 22:20:00 630

转载 UNICODE字符集下CString与char*的转换

<br /> 在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在Visual C++.NET2005环境中Unicode字符集下CString和char *之间相互转换的几种方法,其实也就是Unicode字符集与MBCS字符集转换。<br />1、Unic

2010-10-24 14:32:00 1272

转载 C++字符串完全指引之二 —— 字符串封装类

<br /> 引言<br /><br />  因为C语言风格的字符串容易出错且不易管理,黑客们甚至利用可能存在的缓冲区溢出bug把C语言风格的字符串作为攻击目标,所以出现了很多字符串封装类。不幸的是,在某些场合下我们不知道该使用哪个字符串类,也不知道怎样把一个C风格的字符串转换成一个字符串封装类。<br />  这篇文章将介绍所有在Win32 API, MFC, STL, WTL 和 Visual C++ 运行库中出现的字符串类型。我将描述每一个类的用法,告诉大家怎样创建每一个类的对象以及怎样把一个类转换成

2010-10-20 15:18:00 429

转载 C++字符串完全指引之一 —— Win32 字符编码

原文出处:CodeProject:The Complete Guide to C++ Strings, Part I引言  毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏。你也许正在盯着显示器发愁。本指引将总结引进各种字符类型的目的,展示一些简单的用法,并告诉您在必要时,如何实现各种字符串类型之间的转换。  在第一部分,我们将介绍3种字符编码类型。了解各种编码模式的工作方式是很重要的事情。即使你已经知道一个字符串是一个

2010-09-26 18:01:00 365

原创 大话设计模式学习(十一)——观察者模式

<br />观察者模式又叫发布—订阅模式。它定义了一种一对多的依赖关系,让多个观察着对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己<br /><br />Subject类,可以翻译为主体或者抽象主题,一般用一个抽象类或者一个接口实现<br />class Subject {public: //增加观察者 void Attach(Observer* observer) { observers.push_back(observer)

2010-08-03 22:31:00 841

转载 C与VC下面的函数指针

<br />在标准C&C++下面,函数指针的用法如下:<br />定义一个函数指针模板<br />typedef char    *(*lpExecFunc)(char *);<br />它对应的函数类型如下:<br />char * DealDB2Query(char * lpInbuffer)<br />{<br />}<br />在使用的地方,我们可以先定一个函数针<br />lpExecFunc pDealFunc;<br />然后赋值<br />pDealFunc = DealDB2Query;<

2010-08-03 22:17:00 2266

转载 .net,c#,c++,vc.net ,vc 诸多名词的区别与联系

<br /> <br />         从十年前开始接触编程,接触c,历经各种名词,tc2,tc3,boland c++,c++bulid,vc,vc.net,c#,现在是visual studio 2005。直看的人头晕脑胀。几乎一两年就出现一个新名词。很多东西自己也没使用过,但根据网上的搜索,做个总结吧。所有的一切都是.net引起的。.NET包含一系列的先进技术,里面也有VC呀<br /> <br />1.名词解释:<br /> <br />(1)c就不用说了。地球人都知道。<br /> <br /

2010-06-27 22:46:00 2109

转载 堆和栈的区别

一、预备知识—程序的内存分配  一个由C/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化

2010-06-27 22:12:00 413

原创 大话设计模式学习(十)——建造者模式

建造者模式:将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构建之间的建造顺序通常是稳定的,但对象内部的建构通常面临着复杂的对象,它的好处在于使得建造代码和表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在定义一个具体的建造者就行了Product类——产品类,由多个部件组成class Product {public: vector parts; void Add(CString

2010-06-25 22:13:00 637

原创 大话设计模式学习(九)——外观模式

外观模式,为子系统中的一组接口提供一个一直的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。四个子系统的类:class SubSystemOne{public: void MethodOne() { cout外观类:他需了解所有的子系统的方法或属性,进行组合,以备外界调用class Facade{public: SubSyst

2010-06-06 17:39:00 490

原创 大话设计模式学习(八)——模板方法模式

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法class AbstractClass{public: AbstractClass(void); ~AbstractClass(void);

2010-06-01 22:09:00 459

原创 大话设计模式学习(七)——原型模式

原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。我们来看看基本的原型模型代码。原型类:class Prototype {public: Prototype(CString id) { this->id=id; } CString id; //抽象类

2010-05-29 14:26:00 428

转载 浅拷贝,深拷贝

对于普通类型的对象来说,他们之间的复制是非常简单的,例如: int a = 10;int b =a;  自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如:#include using namespace std;class Test{public: Test(int temp) { }protected: int p1;

2010-05-26 22:14:00 349

原创 大话设计模式学习(六)——工厂方法模式

 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类 简单工厂模式和工厂模式对比,以运算器为例简单工厂类:客户端代码:Operation* oper=OperationFactory.createOperation();oper->NumberA=1;oper->NumberB=2;double Result=

2010-05-22 12:10:00 470

原创 大话设计模式学习(五)——代理模式

代理模式,为其他对象提供一种代理以控制对这个对象的访问。Subject类class Subject {public: virtual void Request()=0;}; RealSubject类class RealSubject : public Subject {public: void Request(){ cout<<_T("真实的请求")<

2010-05-06 22:03:00 451

原创 大话设计模式学习(四)——装饰模式

装饰模式(Decorator):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活具体代码:Component类class Component {public: virtual void Operation()=0;}; ConcreteComponent类class ConcreteComponent : public Compon

2010-05-04 21:40:00 462

原创 大话设计模式学习(三)——四大原则

一 单一职责原则就一个类而言,应该仅有一个引起它变化的原因。我们在做编程的时候,很自然的就会给一个类增加各种各样的功能,比如我们写一个窗体应用程序,一般都会产生一个doc这样的类,于是我们会把各种各样的代码,像某种商业运算的算法啊,数据库访问的代码啊什么的都写到这样的类中,这就意味着,无论任何需求要来,你都需要更改这个类,这是很糟糕的,维护麻烦,复用基本不可能。如果一个类承担的职责过多

2010-05-03 11:19:00 895

原创 大话设计模式学习(二)——策略模式

策略模式:定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化, 不会影响到使用算法的客户//策略基类class Strategy {public: //定义算法接口 virtual void AlgorithmInterface();};class ConcreteStrategyA : public Strategy {p

2010-04-30 13:19:00 341

原创 pl/sql报ora-12154:TNS:无法解析指定的连接符问题

解决方法一在oraDb10g_home->配置和移植工具->net Manager       在本地中新建一个服务命名  这个网络服务名就是登陆时的数据库名        完成这些操作后,选择菜单中文件->保存网络配置就ok了。解决方法二打开安装目录下服务器端的tnsnames.ora,比如我的完整目录是E:/ora

2010-01-05 10:57:00 660

原创 窗口分割类——Cxysplitter类的使用

 现在介绍另一个比较有用的类,我们可以利用它来调整窗口各个界面的大小。以之前在《CtreeCtrl的使用》中实现过的资源管理器为例,对话框中Tree控件和List控件的大小是固定的,我们可以通过使用《窗口排列类——ETSLayout的使用》的方法来实现改变窗口大小时,调整空间大小的问题,但是如果我们不改变窗口大小,如何改变这两个控件所占用的空间呢?此时Cxysplitter类便派上用场了.st

2009-11-22 18:42:00 1126

原创 窗口排列类——ETSLayout的使用

 我们在使用MFC进行界面编程时,会发现当窗口放大或者缩小的时候,里面的控件大小排列等都不会随着窗口的变化而变化,下面介绍一个很好用的类,可以帮助我们解决这个问题。1 首先下载ETSLayout类,将其加入project中。2 在需要排列的对话框类中包含ETSLayout的头文件,并将其父类从CDialog替换为ETSLayoutDialog,注意,对话框类中所有的CDialog字样必须全

2009-11-18 11:34:00 3030

原创 CtreeCtrl的使用

这个例子类似windows的资源管理器 1.首先,建立一个基于对话框的程序,拖入一个Tree控件和List控件,其声明为CTreeCtrl m_TreeCtrl;CListCtrl m_list;//list控件对应的imagelistCImageList *m_imagelist;//tree控件对应的imagelistCImageList *m_listimage;

2009-11-16 13:10:00 1521

原创 大话设计模式学习(一)——简单工厂模式

  #pragma once#include #include using namespace std;/** 运算类*/class MyOperation{public: double NumberA; double NumberB;public: inline virtual double GetResult(){return

2009-11-14 18:24:00 497

原创 UML学习——类图

一 类图关系1 关联在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。 一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值

2009-11-14 11:39:00 548

原创 基于对话框程序菜单变灰问题

在基于对话框的程序中,仅仅使用pCmdUI->Enable(FALSE),只能使其不可用,但是没法将其变灰,解决步骤如下:1.在放置菜单的那个类的头文件中,声明afx void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);2.在响应的cpp文件中增加消息映射:ON_WM_INITMENUPOPUP()

2009-11-10 09:29:00 931

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除