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-сервере?

Ответы на вопрос(6)

Ваш ответ на вопрос