今天在运行Release版本程序时,发现如图显示的错误

在运行MFC程序的Release版本时,断点断在"INT_PTR nResponse = dlg.DoModal();"这句话上的处理

经过调试发现,会断在"INT_PTR nResponse = dlg.DoModal();"再经过F11进入代码内部,发现,是断在了"CreateDlgIndirect"这个函数里面。

从网上查阅资料,找到了解决方法。

自己便整理了错误原因。

这个"CreateDlgIndirect"这个函数做了好多事情,包括:创建对话框的预处理。

借用MFC代码中的注释来说
明吧(以下代码摘自MFC):
#ifndef _AFX_NO_OCC_SUPPORT
        // separately create OLE controls in the dialog template
        if (pOccManager != NULL)
        {
            if (!SetOccDialogInfo(&occDialogInfo))
                return FALSE;

            lpDialogTemplate = pOccManager->PreCreateDialog(&occDialogInfo,
                lpDialogTemplate);
        }

        if (lpDialogTemplate == NULL)
            return FALSE;
#endif //!_AFX_NO_OCC_SUPPORT
意思是:对话框模板中的OLE控件要分离出来然后创建。


经过调试之后,发现因为在代码中添加了ActiveX控件,确没有用到。所有果断的删去了。

结论:

在动态库dll中生成对话框,如果其中包括了ActiveX控件,在创建对话框失败时,需要考虑在CApp::InitInstance()中添加以下语句

OleInitialize(NULL) & AfxEnableControlContainer()

相关文章:

  • 2021-10-07
  • 2022-12-23
  • 2022-02-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-04-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-11-28
  • 2021-05-10
相关资源
相似解决方案