CDialog :: Создать не удалось для диалога с элементом управления ActiveX
У меня есть модуль, который создает немодальное диалоговое окно, содержащее элемент управления ActiveX. Этот модуль был частью приложения MFC EXE, и создание диалогового окна работало нормально. Недавно я переместил модуль на сервер ATL / COM и скопировал ресурс диалога из EXE-файла на сервер COM. При попытке создать немодальный диалог с помощьюCDialog::Create()
происходит ошибка
Я отладил вCDialog::Create
и заметил, что он терпит неудачу в::CreateDialogIndirect()
который возвращаетсяNULL
а такжеGetLastError
возвращается0
, Я изменил флаг «Нет создания ошибки» на «Истина» в свойствах ресурса диалога и получаю более подробную информацию об ошибке. Проблема происходит в диалогеDoDataExchange()
в пределахDDX_Control
макро. Это вызывает вCDataExchange::PrepareCtrl()
с идентификатором ресурса элемента управления следующим образом:
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
COleControlSite* pSite = NULL;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
// Could be a windowless OCX
pSite = m_pDlgWnd->GetOleControlSite(nIDC);
if (pSite == NULL)
{
TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
}
m_idLastControl = nIDC;
m_bEditLastControl = FALSE; // not an edit item by default
return hWndCtrl;
}
Вызов функцииm_pDlgWnd->GetOleControlSite()
происходит сбой для переданного идентификатора ресурса. Кстати, идентификатор ресурса - это идентификатор элемента управления.
Любые предложения о том, почему это работает внутри EXE и не работает на COM-сервере?