| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1369 人关注过本帖
标题:候杰深入浅出MFC:模拟Dynamic Create技术中的宏定义
只看楼主 加入收藏
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
 问题点数:0 回复次数:4 
候杰深入浅出MFC:模拟Dynamic Create技术中的宏定义

最近在看候杰深入浅出MFC的电子版, 第一章中有模拟Dynamic Create技术的代码,
我用VC++6.0把代码抄进去之后出现如下错误,检查了好久,竟没有发现原因何在。

编译错误:
E:\MY DOCUMENT\MY PROGRAM STUDY\LEARNJJHOURMFCEXPLAIN\CH2\MFCEmulation\MFC.cpp(63) : error C2653: 'bass_class_name' : is not a class or namespace name
E:\MY DOCUMENT\MY PROGRAM STUDY\LEARNJJHOURMFCEXPLAIN\CH2\MFCEmulation\MFC.cpp(63) : error C2065: 'classbass_class_name' : undeclared identifier
E:\MY DOCUMENT\MY PROGRAM STUDY\LEARNJJHOURMFCEXPLAIN\CH2\MFCEmulation\MFC.cpp(63) : error C2440: 'initializing' : cannot convert from 'int *' to 'struct CRuntimeClass *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

相关的结构:
//--------------------------------------------------------------------------------------------*
struct CRuntimeClass
{
//Attributes
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema; //Schema number of the loaded class
CObject* (PASCAL* m_pfnCreateObject) (); //NULL => abstract class
CRuntimeClass* m_pBaseClass;

//CRuntimeClass objects linked together in simple list
static CRuntimeClass* pFirstClass; //Start of class list
CRuntimeClass* m_pNextClass; //Linked list of registered classes
};

//--------------------------------------------------------------------------------------------*
struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass* pNewClass);
};


相关的宏定义:
//--------------------------------------------------------------------------------------------*
#define RUNTIME_CLASS(class_name) \
(&class_name::class##class_name)

#define DECLARE_DYNAMIC(class_name) \
public: \
static CRuntimeClass class##class_name;\
virtual CRuntimeClass* GetRuntimeClass() const;

#define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
static char _lpsz##class_name[] = #class_name; \
CRuntimeClass class_name::class##class_name = { \
_lpsz##class_name, sizeof(class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL }; \
static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name); \
CRuntimeClass* class_name::GetRuntimeClass() const \
{ return &class_name::class##class_name;} \

#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
_IMPLEMENT_RUNTIMECLASS(class_name, bass_class_name, 0xFFFF, NULL)
//--------------------------------------------------------------------------------------------*

源代码:

vetTPSpP.zip (15.1 KB) 候杰深入浅出MFC:模拟Dynamic Create技术中的宏定义


搜索更多相关主题的帖子: MFC Create技术 Dynamic 深入浅出 定义 
2006-10-13 13:47
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
找出来了!!
还是自己笔误砍手啦!

#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
_IMPLEMENT_RUNTIMECLASS(class_name, bass_class_name, 0xFFFF, NULL)

把base_class_name写成bass_class_name了。

谷底深深行 ,峰顶漫漫步......@_@
2006-10-13 14:30
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
把我眼睛都看疼了。


#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
_IMPLEMENT_RUNTIMECLASS(class_name, bass_class_name, 0xFFFF, NULL)

写错了个字母,其他就是加几个IMPLEMENT_DYNAMIC(...)
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-13 15:02
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

怎么都在学MFC呢?
不想学MFC了,学API


2006-10-13 16:02
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
非常感谢wfpb版主的关注,俺太粗心啦。。。。接受批评,然后改正。。。

谷底深深行 ,峰顶漫漫步......@_@
2006-10-13 18:15
快速回复:候杰深入浅出MFC:模拟Dynamic Create技术中的宏定义
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017579 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved