Linker cannot find CFrameWnd::_GetBaseMessageMap
Hello newsgroup,
[I posted this to microsoft.public.vc.mfc some days before, but noone was able
to help me.]
I'm experiencing a quite strange phenomenon: I have a class derived from
CFrameWnd inside a static library (the following code shows the definition of
the template version; in my code I use CFrameWnd for t_BaseFrameClass). The
reason why I want to use the template is that I want to be able to use the
CHelperMixin class for MDI and SDI projects.
[The following code depends on MFC 4.2 (Visual C 6.0). Also you'll have to
define _AFXDLL in order to compile it]
#include <afxwin.h>
template<class t_BaseFrameClass>
class CHelperMixin: public t_BaseFrameClass
{
typedef t_BaseFrameClass TBaseFrameClass;
protected:
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap();
virtual const AFX_MSGMAP* GetMessageMap() const;
};
template<class t_BaseFrameClass>
inline const AFX_MSGMAP* PASCAL
CHelperMixin<t_BaseFrameClass>::_GetBaseMessageMap ()
{
return &TBaseFrameClass::messageMap;
}
template<class t_BaseFrameClass>
inline const AFX_MSGMAP* CHelperMixin<t_BaseFrameClass>::GetMessageMap() const
{
// Define an empty message map (just for demonstration).
static const AFX_MSGMAP_ENTRY messageEntries[] =
{
END_MESSAGE_MAP()
static const AFX_MSGMAP messageMap =
{
TBaseFrameClass::_GetBaseMessageMap,
&messageEntries[0]
};
return &messageMap;
}
class CMyMainFrame : public CHelperMixin<CFrameWnd>
{
};
int main ()
{
CMyMainFrame MyMainFrame;
return 0;
}
Everything compiles fine, but I get a linker error:
error LNK2001: Unresolved external
"protected: static struct AFX_MSGMAP const * __stdcall
CFrameWnd::_GetBaseMessageMap(void)"
Strange enough, if I provide this method in one of my source files, everything
seems to be OK. I wonder how this could happen. Shouldn't the linker complain
about multiple definitions of this method? Surely this method is part of the
static libraries of MFC!
Thanks in advance,
Stuart