静态链接编译通过,使用MFC共享dll编译不过

[复制链接]
查看11 | 回复5 | 2008-5-31 12:23:36 | 显示全部楼层 |阅读模式
在工程设置里面选择“使用MFC做为静态链接库”进行编译,一切正常
但是如果设置成“使用MFC做为共享dll”编译时就会出错,提示:'
D:\我的毕业设计\hchqq\DChatDlg.cpp(65) : warning C4273: 'protected: static struct AFX_MSGMAP const CDChatDlg::messageMap' : inconsistent dll linkage.dllexport assumed.
D:\我的毕业设计\hchqq\DChatDlg.cpp(65) : error C2491: 'CDChatDlg::messageMap' : definition of dllimport static data member not allowed
------错误提示附近代码-------------------------------------------------
void CDChatDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDChatDlg)
DDX_Control(pDX, IDC_STATIC_SYSTEM_INFO, m_static_info);
DDX_Control(pDX, IDC_CHECK_WANT_BACK, m_bnt_wantback);
DDX_Control(pDX, IDC_RICHEDIT_TEMP, m_temp_edit);
DDX_Control(pDX, IDC_STATIC_FACE, m_static_face);
DDX_Control(pDX, IDC_BUTTON_FACE, m_bnt_face);
DDX_Control(pDX, IDC_SEND_EDIT, m_send);
DDX_Control(pDX, IDC_RECIVE_EDIT, m_recive);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDChatDlg, CDialog)/*---------就是这一行错了-------*/
//{{AFX_MSG_MAP(CDChatDlg)
ON_MESSAGE(WM_FRIEND_MESSAGE_GET, OnGetFriendMessage)
ON_MESSAGE(WM_FRIEND_MESSAGE_GET_BACK, OnBackMessageArray)
ON_MESSAGE(WM_FILE_RECIVE_INFO, OnReciveFile)
ON_MESSAGE(WM_USER_LOGIN_OR_OUT, OnUserLoginout)
ON_BN_CLICKED(IDC_SIDE_BUTTON, OnSideButton)
ON_BN_CLICKED(IDC_SEND_BUTTON, OnSendButton)
ON_BN_CLICKED(IDC_LIST_BUTTON, OnListButton)
ON_BN_CLICKED(IDC_CLOSE_BUTTON, OnCloseButton)
ON_BN_CLICKED(IDC_RECORD_BUTTON, OnRecordButton)
ON_WM_CLOSE()
ON_WM_SETCURSOR()
ON_BN_CLICKED(IDC_STATIC_FACE, OnStaticFace)
ON_COMMAND(ID_MENUITEM_SMILE, OnMenuitemSmile)
ON_COMMAND(ID_MENUITEM_KU, OnMenuitemKu)
ON_COMMAND(ID_MENUITEM_HAN, OnMenuitemHan)
ON_COMMAND(ID_MENUITEM_GOOD, OnMenuitemGood)
ON_COMMAND(ID_MENUITEM_KUU, OnMenuitemKuu)
ON_COMMAND(ID_MENUITEM_LIKE, OnMenuitemLike)
ON_COMMAND(ID_MENUITEM_OK, OnMenuitemOk)
ON_COMMAND(ID_MENUITEM_PORSE, OnMenuitemPorse)
ON_COMMAND(ID_MENUITEM_THANK, OnMenuitemThank)
ON_COMMAND(ID_MENUITEM_YES, OnMenuitemYes)
ON_COMMAND(ID_MENUITEM_EN, OnMenuitemEn)
ON_COMMAND(ID_MENUITEM_XIAO, OnMenuitemXiao)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
--------------------------------------------------------
各位有没有碰上过这种情况,是怎么解决的? 我在网上找到了一些,都说是编译dll时出现的问题,但我不是在编译dll啊,只是普通的对话框
vc6啊 我没装2005
不过就是修改了winver的定义,改成xp的版本号
___________________________________________________
messageMap 不是我添加的变量啊,如果要改的话要改mfc的头文件(见我的马甲kingstarer补充)
---------------------------------------------------

回复

使用道具 举报

千问 | 2008-5-31 12:23:36 | 显示全部楼层
#ifdef _AFXDLL#define DECLARE_MESSAGE_MAP() \private: \ static const AFX_MSGMAP_ENTRY _messageEntries[]; \protected: \ static AFX_DATA const AFX_MSGMAP messageMap; \ static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \ virtual const AFX_MSGMAP* GetMessageMap() const; \#else#define DECLARE_MESSAGE_MAP() \
回复

使用道具 举报

千问 | 2008-5-31 12:23:36 | 显示全部楼层
这个一般是预定义宏的问题导致。这个工程设置最好不要修改,如果要修改的话,建议使用wizard新建一个工程,在wizard中设置配置属性,然后将 cpp,h文件加入工程。
回复

使用道具 举报

千问 | 2008-5-31 12:23:36 | 显示全部楼层
使用mfc是个很不好的习惯...用basic也能写出很优秀的软件,你是从来没碰到过代码通用性的问题,想想你在网上找到的优秀代码段有几个是使用了mfc的,尽管BS我好了,有一天需要用BCB来编译你代码的时候哭死你
回复

使用道具 举报

千问 | 2008-5-31 12:23:36 | 显示全部楼层
你是用的那个版本的是VC6?还是2005?2008?我遇到过2008有你的问题,是不是SDK冲突?去掉些包含目录试试
回复

使用道具 举报

千问 | 2008-5-31 12:23:36 | 显示全部楼层
切,自己用不好就说是不好的习惯。bs这种人,很多优秀的软件都是mfc写出来的。CDChatDlg::messageMap成员messageMap改成别的名字
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行