ActiveX コントロールを含むモードレス ダイアログを作成するモジュールがあります。このモジュールは MFC EXE アプリケーションの一部であり、ダイアログの作成は正常に機能しました。最近、モジュールを ATL/COM サーバーに移動し、ダイアログ リソースを EXE から COM サーバーにコピーしました。モードレス ダイアログを使用して作成しようとするとCDialog::Create()
、エラーが発生します。
デバッグして、 which returnsとreturnsCDialog::Create
で失敗することに気付きました。ダイアログ リソースのプロパティで "No Fail Create" フラグを True に変更したところ、エラーの詳細が表示されました。この問題は、マクロ内のダイアログで発生します。これは、次のようにコントロールのリソース ID を使用して を呼び出します。::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()
渡されたリソース ID に対する関数の呼び出しは失敗します。ちなみに、リソース ID はコントロールの ID です。
これがEXE内で機能し、COMサーバーで失敗する理由について何か提案はありますか?