FMD开发文集 -- MFC CObject浅析

CObject是大部分的MFC类的基类 为了完成MFC类的判断、动态生成、序列化等特殊功能,CObject中添加了特定的处理。 为了进一步增强对MFC类对象的理解,在此对CObject源码及相关宏定义进行分析。 (所附代码并非原始代码,为说明问题而作了删减。) 主要介绍了以下几方面内容:

1.CObject简要声明

2.CRuntimeClass结构

3.RUNTIME_CLASS

4.DYNAMIC支持

5.DYNCREATE支持

6.SERIAL支持

一.CObject简要声明

class CObject
{
public:
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject();

void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);
void PASCAL operator delete(void* p);
void PASCAL operator delete(void* p, void* pPlace);
#if defined(_DEBUG) //调试模式用,多了nLine参数,用于保存原码行号。
void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
#endif
protected:
CObject();
private:
CObject(const CObject& objectSrc);
void operator=(const CObject& objectSrc);
// Attributes
public:
BOOL IsSerializable() const;
BOOL IsKindOf(const CRuntimeClass* pClass) const;
// Overridables
virtual void Serialize(CArchive& ar);
#if defined(_DEBUG) //调试模式下用
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
public:
static const AFX_DATA CRuntimeClass classCObject;
static CRuntimeClass* PASCAL _GetBaseClass();
};
在此声明中很多都是纯虚函数,定义的一个一般对象的"界面"

时间: 2024-09-20 15:19:51

FMD开发文集 -- MFC CObject浅析的相关文章

FMD开发文集 -- MFC调试模式下new操作符的特殊处理

一.在调试模式下,new操作符号通过宏定义转换成了调试版本. 在文件头经常可以发现以下语句: #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif其中,将new定义为DEBUG_NEW 二.DEBUG_NEW的处理 调试版本的new操作函数:void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName

FMD开发文集 -- CArchive原理

MFC 提供CArchive类实现数据的缓冲区读写,同时定义了类对象的存储与读取方案. 以下对CArchvie 的内部实现作分析. 一.概述 CArchive使用了缓冲区,即一段内存空间作为临时数据存储地,对CArchive的读写都先依次排列到此缓冲区,当缓冲区满或用户要求时,将此段整理后的数据读写到指定的存储煤质. 当建立CArchive对象时,应指定其模式是用于缓冲区读,还是用于缓冲区写. 可以这样理解,CArchive对象相当于铁路的货运练调度站,零散的货物被收集,当总量到达火车运量的时候

Android开发之广播机制浅析

对于了解Android程序设计的人都知道,广播是Android开发中的一个重要的功能,在Android里面有各式各样的广播,比如:电池的状态变化.信号的强弱状态.电话的接听和短信的接收等等,今天本文就来给大家简单介绍一下系统发送.监听这些广播的机制. Android中的广播机制基本如下图所示: 那广播在Android程序中到底是如何运行的呢?下面将以代码的形式给大家好好分析一下: 一.发送广播 Intent是Activity中发送广播的桥梁,通过他我们可以轻松的将广播发送到系统中,具体的实现如下

VC MFC专题

MFC程序如何实现给对话框添加背景图片 MFC游戏开发笔记十 游戏中的碰撞检测进阶:地图类型&障碍物 MFC游戏开发笔记九 游戏中的碰撞判定初步&怪物运动简单AI MFC游戏开发笔记八 游戏特效的实现(二):粒子系统 MFC游戏开发笔记七 游戏特效的实现(一):背景滚动 MFC游戏开发笔记六 图像双缓冲技术:实现一个流畅的动画 MFC游戏开发笔记五 定时器和简单动画 MFC游戏开发笔记四 键盘响应和鼠标响应:让人物动起来 MFC游戏开发笔记三 游戏贴图与透明特效的实现 MFC游戏开发笔记二

MFC入门教程

Visual C++ MFC简明教程(1) Visual C++ MFC简明教程(2) Visual C++ MFC简明教程(3) Visual C++ MFC简明教程(4) MFC教程(1)--MFC概述 MFC教程(2)-- MFC和Win32 MFC教程(3)-- CObject类 MFC教程(4)-- 消息映射的实现(1) MFC教程(4)-- 消息映射的实现(2) MFC教程(5)-- MFC对象的创建(1) MFC教程(5)-- MFC对象的创建(2) MFC教程(6)-- 应用程序

注册-mfc activex控件开发问题

问题描述 mfc activex控件开发问题 mfc activex控件(封装另外一个dll文件中的接口)中的方法在vs2008中经过编译注册后通过js调用有效,而单独进行注册则提示"对象不支持此属性或方法",这是什么原因啊?各位大神!!! 解决方案 里面的方法有问题看看参数Hi t对不 解决方案二: regsvr32方式注册的吗,是否用admin权限

用ATL和MFC来创建ActiveX控件

摘要目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码.这两种框架在它们对于开发ActiveX的用途上会合了.我们将看看这两种框架是如何适用于创建ActiveX控件的--突出其优缺点,亲自经历创建一个控件的过程--以便你能够决定何时使用一种框架,何时使用另一种. 如果你希望用C++来写ActiveX控件,有两个流行的框架,一个是Micr

visual studio-为什么在VS2013环境中使用MFC会有如下情况

问题描述 为什么在VS2013环境中使用MFC会有如下情况 这是最后的程序 void CMFCApptoolsView::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 #include <iostream> system("wscript"); } 解决方案 显然编译失败了.你看下这个路径上,没有你生成的 systemtools.exe 解决方案二: 在这种技术论坛上 ,就不要吵架了吧.... 解决方案三: 首先,看一看编译是

java-android 开发模式是啥?

问题描述 android 开发模式是啥? Android app开发模式到底如何搭建,工程结构又是什么样子的?现在我发现好多人都没有遵从MVC模式来写,大量的逻辑全部写在activity里,醉了 解决方案 一般就是参考MVC模式,大概分为简单的几层.推荐一个文章给你: http://bbs.csdn.net/topics/391069356 解决方案二: Android开发的MVC模式Android飞行模式开发Android开发中MVP模式浅析 解决方案三: 开发模式也就是一种参考,你喜欢用就用