Я скопировал существующий заголовок для класса коробки dlg (созданный с помощью мастера dlg class wizard / mfc wizard). Казалось, все идет нормально, пока я не добавлю в проект файл cpp. Теперь я получаю нечетные ошибки ссылки для некоторых магических методов mfc:
ошибка LNK2001: неразрешенный внешний символ "public: виртуальная структура" CRuntimeClass * __thiscall DlgGapWindow :: GetRuntimeClass (void) const " ( ? GetRuntimeClass @ DlgGapWindow @@ UBEPAUCRuntimeClass @ @XZ)
ошибка LNK2001: неразрешенный внешний символ "protected: виртуальная структура" AFX_MSGMAP const * __thiscall DlgGapWindow :: GetMessageMap (void) const " ( ? GetMessageMap @ DlgGapWindow @@ MBEPBUAFX_MSGMAP @@XZ)
Почему это должно быть?
Вот соответствующий код в заголовке
class DlgGapWindow : public CDialog
{
DECLARE_DYNAMIC(DlgGapWindow)
public:
DlgGapWindow(CWnd* pParent = NULL);
virtual ~DlgGapWindow();
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual BOOL OnInitDialog();
enum { IDD = IDD_DIALOG_GAP_VIEW };// Dialog Data
GapViewer m_chart;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnSizing(UINT fwSide, LPRECT pRect) ;
afx_msg void OnTimer(ONTIMER_TYPE nIDEvent);
afx_msg void OnDestroy();
afx_msg void OnClose();
afx_msg void OnActivate(UINT,CWnd *,BOOL);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
Я не вижу ничего из класса, который я смоделировал после этого, кажется, отсутствует. Я не нашел ничего полезного в google или других поисках, чтобы указать, почему эти волшебные вещи mfc отсутствуют. Другие мои классы не определяют их явно, и в них нет ошибок.
RC-файл имеет соответствующее определение dlg.
EDIT:
Спасибо за помощь DECLARE_DYNAMIC - теперь у меня нет ошибки GetRuntimClass () - только ошибка GetMessagemap ().