Исключение CImageList в программировании на MFC VS-2008

#visual-studio #visual-studio-2008 #mfc

#visual-studio #visual-studio-2008 #mfc

Вопрос:

Я следую примеру 8a из книги MFC под названием (Программирование с помощью Microsoft Visual C .NET, шестое издание).

Однако, когда я попытался скомпилировать его, я столкнулся со следующими исключениями:

 Unhandled exception at 0x78a782ac (mfc90ud.dll) in Ex08a.exe:
0xC0000005: Access violation reading location 0x00000020.
  

который указывает на

 {
    ASSERT(::IsWindow(m_hWnd));
    return CImageList::FromHandle((HIMAGELIST)::SendMessage(m_hWnd, LVM_SETIMAGELIST,
       nImageList, (LPARAM)pImageList->GetSafeHandle()));
}
  

в afxcmn.inl

Поскольку я использую Visual studio 2008, существуют различия между моим кодом и кодом книги.

Следующие строки являются некоторыми из этих несоответствий:

 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, amp;CEx08aDialog::OnLvnItemChangedListview1)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREEVIEW1, amp;CEx08aDialog::OnTvnSelchangedTreeview1)

static char* color[]={"white","black","red","blue","yellow","cyan","purple","green"};
pList->InsertItem(n,(LPCTSTR)color[n],n);
  

Любые комментарии приветствуются.

Комментарии:

1. «местоположение 0x00000020» подразумевает попытку доступа к переменной-члену через указатель, для которого установлено значение NULL (смещение элемента в классе равно 32 байтам). Посмотрите вокруг, когда получите исключение, и найдите этот нулевой объект (возможно, тот самый CListCtrl, который вы вызвали, но я не могу сказать наверняка).

2. @eran: ваш комментарий должен быть ответом, ИМХО

3. @Serge-appTranslator, я не сделал это ответом, потому что он неполный. Учитывая ограниченный объем информации по этому вопросу, я не могу сказать, какой указатель имеет значение NULL, и я, очевидно, не могу сказать, почему. Если я получу какую-то обратную связь от OP, я мог бы превратить ее в ответ.