dll中创建了个CMyDialog类,然后制作成dll,给外界调用(外界派生这个类)// CMyDialog 到处类class _declspec(dllexport) CMyDialog : public CDialogEx
{// DECLARE_DYNAMIC(CMyDialog)         //  为什么这里要注释掉,否则 链接这个dll会出错
// 构造
public:
CMyDialog(UINT ID,CWnd* pParent = NULL):CDialogEx(ID, pParent)
       {       }       ~CMyDialog()
      {
      }  // DECLARE_MESSAGE_MAP()                  //  为什么这里要注释掉,否则 链接这个dll会出错
};

解决方案 »

  1.   

    DECLARE_DYNAMIC 是动态创建为什么有的类,需要加这个宏,比如: CMainFrame,而有的类,则不需要,比如:CXXDialog。。有什么区别
      

  2.   

    是扩展mfc  dll 的, 
    我问的是: DECLARE_DYNAMIC 是动态创建为什么有的类,需要加这个宏,比如: CMainFrame,而有的类,则不需要,比如:CXXDialog。。
      

  3.   

    动态创建: 可以根据名字或RUNTIME信息创建. 比如保存在文件中时,只能记录类的名字,打开文件读内容时,可根名字创建相应的对象.因为你的对话框不需要保存.不过加上那个宏也没影响.连接错误可能是你没有在cpp中加IMPLEMENT_DYNCREATE
      

  4.   

    我就说嘛, 对话框怎么会有 动态创建呢,再请教个问题啊:  我的CMyDialog是CDialog的一个派生类, 然后封装成一个扩展dll外界可能会再次派生CMyDialog,   如:CXXDialog:public CMyDialog,,,,  那么我把CMyDialog中的DECLARE_MESSAGE_MAP() 给注释掉,会怎样啊?会有影响到它的派生类吗?
      

  5.   

    1. 如果你真想知道,请看看《深入浅出mfc》吧
    2.建议你安装个vc助手,点 右上角的勾勾,去看看这个宏的定义
      

  6.   

    DECLARE_MESSAGE_MAP() 给注释掉,会怎样啊?在类的定义文件中有BEGIN_MESSAGE_MAP宏和END_MESSAGE_MAP宏以处理用户消息.如果你的Dialog不处理任何消息, 也可以释掉.
      

  7.   

     谢谢, 你VC学的不错额 我的那个CMyDialog类,其实就是想做做一个多功能的对话框类, 这样的它的派生类就可以有多功能了(放在dll中) ,方便升级之用
      

  8.   

    刚才搜到别人发的一个老帖子:http://topic.csdn.net/u/20081209/16/fbc2af1e-44ec-4273-9b72-a577f694e01e.html帖子内容为:我才开始学习使用MFC编写程序,照着书本写了段只能显示一个窗口的简单代码,其中声明了一个继承自CFrameWnd的类,类体内定义了protected成员DECLARE_MESSAGE_MAP(),我把DECLARE_MESSAGE_MAP()去掉了,而我的类实现代码中只是简单的Create()了一个窗口,窗口也能显示出来.我觉得只是创建个窗口而已,又没有想过要对它做些什么操作,所以MESSAGE_MAP大概可以不要吧,所以就去掉它了.请问我这样的做法正确吗?我不了解消息映射,去掉MESSAGE_MAP后会不会造成什么系统错误或者去掉它后MFC不知道那些消息射到哪里去才好?
    没看懂,高手解答一下吧,