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

2025-04-14 22:14:48
推荐回答(5个)
回答1:

#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() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
virtual const AFX_MSGMAP* GetMessageMap() const; \

#endif

#ifdef _AFXDLL
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
{ return &baseClass::messageMap; } \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \

#else
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \

#endif

#define END_MESSAGE_MAP() \
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
}; \

回答2:

这个一般是预定义宏的问题导致。
这个工程设置最好不要修改,如果要修改的话,建议使用wizard新建一个工程,在wizard中设置配置属性,然后将 cpp,h文件加入工程。

回答3:

使用mfc是个很不好的习惯...

用basic也能写出很优秀的软件,你是从来没碰到过代码通用性的问题,想想你在网上找到的优秀代码段有几个是使用了mfc的,尽管BS我好了,有一天需要用BCB来编译你代码的时候哭死你

回答4:

你是用的那个版本的是VC6?还是2005?2008?

我遇到过2008有你的问题,是不是SDK冲突?去掉些包含目录试试

回答5:

切,自己用不好就说是不好的习惯。
bs这种人,很多优秀的软件都是mfc写出来的。
CDChatDlg::messageMap
成员messageMap改成别的名字