VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 614|回复: 3

求牛人帮忙!!!Release下的unhandled exception问题!

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-4 19:30:01 | 显示全部楼层 |阅读模式
程序在Debug中没有问题,但在Release下就会出现unhandled exception in config.exe: 0xC0000005: Access Violation.

界面中有一个list control控件,里面有一行内容,在这一行之上双击事件是正确的,但要是在空白处双击会有上面这个错误.

BEGIN_MESSAGE_MAP(CSetODBCDlg, CDialog)
        ON_NOTIFY(NM_DBLCLK,                IDC_ODBC_BASE_LIST, OnListDbClick)   //双击list control
END_MESSAGE_MAP()

void CSetODBCDlg::OnListDbClick()
{
        POSITION pos = ((CListCtrl*)GetDlgItem(IDC_ODBC_BASE_LIST))->GetFirstSelectedItemPosition();
        if (pos == NULL) //点击一个空行
        {
                TRACE0("No items were selected!\n");
        }
        else  //点击一个非空行
        {
                int nItem = ((CListCtrl*)GetDlgItem(IDC_ODBC_BASE_LIST))->GetNextSelectedItem(pos);
               
                CDirSearchCfgDlg        dlg(this,EDirectoryODBC,nItem);
                dlg.DoModal();
        }
}

麻烦各位牛人帮忙分析一下,万分感谢!!!
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-12 14:45:01 | 显示全部楼层
在空白处点击时nItem == -1,   CDirSearchCfgDlgdlg(this,EDirectoryODBC,nItem);
在nItem==-1时有问题,将nItem==-1的情况去屏蔽掉就行了
回复

使用道具 举报

0

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-12 19:15:01 | 显示全部楼层
就个不知道问题出在哪,你输出调试信息,一步一步排查只能
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-6-14 14:00:02 | 显示全部楼层
这个list control一直会有问题,不知道是不是初始化函数的问题,麻烦看看,谢谢!
BOOL CSetODBCDlg::OnInitDialog()
{
        LOAD_DYNSTRINGS(theApp.GetDico());

        m_popmenu.LoadMenu(IDR_DIR_PMENU_ODBC_CFG);       
        theApp.GetDico()->TranslateMenu(&m_popmenu);

        CListCtrl *listCtrl = (CListCtrl*)GetDlgItem(IDC_ODBC_BASE_LIST);

        // Draw and load control
        DrawControl();

        listCtrl->SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);               

//Get defined base in registry
        if (DIR_IsODBCDirectoryExist())
        {
                int nbODBCdir =        DIR_GetODBCDirectoryNb();
                ODBCBaseDef                odbcBaseDef;

                for (int i=0;i<nbODBCdir;i++)
                {
                        DIR_GetODBCDirectoryInfo(i, &odbcBaseDef);
                        AddItem(&odbcBaseDef);
                }
        }

        listCtrl->SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);


        return FALSE;
}

void CSetODBCDlg::DrawControl()
{
        CListCtrl *listCtrl = (CListCtrl*)GetDlgItem(IDC_ODBC_BASE_LIST);

        CRect rect;
        listCtrl->GetClientRect(&rect);
        rect.right -= CXVSCROLL + 1;

        // create column
        LV_COLUMN lvC;

        lvC.mask        = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
        lvC.fmt                = LVCFMT_LEFT;

        // Create only one column
        lvC.iSubItem = 0;
        lvC.pszText = (TCHAR*)_TRANSLATE("SC_ODBC_DIRECTORY_NAME");
        lvC.cx                = rect.Width()*3/10;                                                // column 1

        listCtrl->InsertColumn(0, &lvC);

        lvC.iSubItem = 1;
        lvC.pszText = (TCHAR*)_TRANSLATE("SC_ODBC_FILE_NAME");
        lvC.cx                = rect.Width()*11/20;                                                // column 2

        listCtrl->InsertColumn(1, &lvC);
       
        lvC.iSubItem = 2;
        lvC.pszText = (TCHAR*)_TRANSLATE("SC_ODBC_TABLE_NAME");
        lvC.cx                = rect.Width()*1/5;                                                // column 3                                                            

        listCtrl->InsertColumn(2, &lvC);

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表