今天碰到一个很奇怪的问题,在VS2005下开发基于MFC程序的时候,如果将IMPLEMENT_DYNCREATE这个宏放在CPP文件的开头,居然运行时出现一堆错误,但是如果将这个宏放在CPP文件的末尾则没有什么问题。
更有意思的是,如果要将这个宏放在文件头也行,但是不能用宏的形式出现,而必须将它展开,我们知道在MFC中,IMPLEMENT_DYNCREATE的定义为:
#define
IMPLEMENT_DYNCREATE(class_name, base_class_name) /
CObject* PASCAL class_name::CreateObject() /
{ return new class_name; } /
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, /
class_name::CreateObject, NULL)
我在CPP文件头将这个宏展开变成:
CObject* PASCAL CMyClass::CreateObject()
{ return new CMyClass; }
IMPLEMENT_RUNTIMECLASS(CMyClass, CBaseClass, 0xFFFF, /
CMyClass::CreateObject, NULL)
居然一切OK了,运行正常!!
真是不可思议!!!!
百思不得其解,估计跟编译器有关,因为MFC代码中的这个宏一向也是出现在文件的末尾的。在此之前还会加上个
#ifdef
AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
这样的东西。
不过也可能是因为自己编译出来的MFC库有问题。
思考中。。。。。。。。。。。。。。。