使用如下代码创建表格行时
CControlUI* pControlUI = CDialogBuilder().Create("test_report\\test_report_table.xml");
if (pControlUI == NULL)
{
::MessageBox(NULL, "创建表格项失败", "错误", MB_ICONERROR);
return;
}
软件会在查找多条数据时,偶尔会直接出现异常访问,后通过百度查询找到如下次资料。
繁调用CDialogBuilder的create接口创建同一个配置文件,会报异常;
正常的处理方式如下:
if (!m_dlgBuilder.GetMarkup()->IsValid())
{
pElement = static_cast<CListContainerElementUI>(m_dlgBuilder.Create(_T("FriendListItem.xml"), \
(UINT)0, NULL, &m_PaintManager));
}
else
{
pElement = static_cast<CListContainerElementUI>(m_dlgBuilder.Create(NULL, &m_PaintManager));
}
因此通过这个代码,我把代码如下改变
CDialogBuilder m_dlgBuilderTestReportTableRow;
CControlUI* get_test_report_table_row();
CControlUI* ui_test_report::get_test_report_table_row()
{
CControlUI* pElement = NULL;
if (!m_dlgBuilderTestReportTableRow.GetMarkup()->IsValid())
{
pElement = static_cast<CListContainerElementUI*>(m_dlgBuilderTestReportTableRow.Create("test_report\\test_report_table.xml", (UINT)0, NULL, &m_PaintManager));
}
else
{
pElement = static_cast<CListContainerElementUI*>(m_dlgBuilderTestReportTableRow.Create(NULL, &m_PaintManager));
}
return pElement;
}
CControlUI* pControlUI = get_test_report_table_row();
if (pControlUI == NULL)
{
::MessageBox(NULL, "创建表格项失败", "错误", MB_ICONERROR);
return;
}
m_pListSearchUI->Add(pControlUI);
最终问题解决。