环境:VS2008  C++ 
为了解决界面Enter结束程序问题 响应消息DM_GETDEFID。
运行的时候弹出
Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003).
XXX.exe 中的 0x7c812fd3 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012ef2c 处的 COleException。
怎么解决?
这是和什么冲突了?
声明:
BEGIN_MESSAGE_MAP(CWholeBundleSteelBarCounterDlg, CDialog)
ON_MESSAGE(DM_GETDEFID, OnGetDefID)LRESULT CWholeBundleSteelBarCounterDlg::OnGetDefID(WPARAM wParam,LPARAM lParam)
{
DM_GETDEFID
return MAKELONG(0,DC_HASDEFID);
}BEGIN_MESSAGE_MAP 内容
BEGIN_MESSAGE_MAP(CWholeBundleSteelBarCounterDlg, CDialog)
        ON_MESSAGE(DM_GETDEFID, OnGetDefID)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_SteelCount, &XXXDlg::OnBnClickedSteelCount)
ON_BN_CLICKED(IDC_SetParameter, &XXXDlg::OnBnClickedSetparameter)
ON_BN_CLICKED(IDC_CloseSystem, &XXXDlg::OnBnClickedCloseSystem)
ON_BN_CLICKED(IDC_BUTTON_FRONT, &XXXDlgg::OnBnClickedButtonFront)
ON_BN_CLICKED(IDC_BUTTON_NEXT, &XXXDlg::OnBnClickedButtonNext)
ON_BN_CLICKED(IDC_FaultTest, &XXXDlg::OnBnClickedFaultTest)
ON_BN_CLICKED(IDC_ThresholdShow, &XXXDlg::OnBnClickedViewShow)
ON_BN_CLICKED(IDC_DiaCalibration, &XXXDlg::OnBnClickedDiacalibration)
ON_BN_CLICKED(IDC_UP, &XXXDlg::OnBnClickedUp)
ON_BN_CLICKED(IDC_DOWN, &XXXDlg::OnBnClickedDown)
ON_BN_CLICKED(IDC_LEFT, &XXXDlg::OnBnClickedLeft)
ON_BN_CLICKED(IDC_RIGHT, &XXXDlg::OnBnClickedRight)
ON_BN_CLICKED(IDC_MODE_RADIO1, &XXXDlg::OnBnClickedModeRadio1)
ON_BN_CLICKED(IDC_MODE_RADIO3, &XXXDlg::OnBnClickedModeRadio3)
ON_BN_CLICKED(IDC_MODE_RADIO4, &XXXDlgg::OnBnClickedModeRadio4)
ON_BN_CLICKED(IDC_MODE_RADIO5, &XXXDlg::OnBnClickedModeRadio5)
ON_BN_CLICKED(IDC_MODE_RADIO6, &XXXDlg::OnBnClickedModeRadio6)
ON_BN_CLICKED(IDC_MODE_RADIO7, &XXXDlg::OnBnClickedModeRadio7)
ON_BN_CLICKED(IDC_MODE_RADIO8, &XXXDlg::OnBnClickedModeRadio8)
ON_BN_CLICKED(IDC_MODE_RADIO9, &XXXDlg::OnBnClickedModeRadio9)
ON_BN_CLICKED(IDC_MODE_RADIO2, &XXXDlg::OnBnClickedModeRadio2)
ON_BN_CLICKED(IDC_MODE_RADIO10, &XXXDlg::OnBnClickedModeRadio10)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_CALIBRATIONSLIDER, &XXXDlg::OnNMCustomdrawCalibrationslider)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BUTTON3, &XXXDlg::OnBnClickedAutoCalcButton)
ON_BN_CLICKED(IDC_MODE_RADIO11, &XXXDlg::OnBnClickedModeRadio11)
ON_BN_CLICKED(IDC_MODE_RADIO12, &XXXDlg::OnBnClickedModeRadio12)
ON_BN_CLICKED(IDC_MODE_RADIO13, &XXXDlg::OnBnClickedModeRadio13)
ON_BN_CLICKED(IDC_MODE_RADIO14, &XXXDlg::OnBnClickedModeRadio14)
ON_BN_CLICKED(IDC_MODE_RADIO15, &CXXXDlg::OnBnClickedModeRadio15)
ON_BN_CLICKED(IDC_MODE_RADIO16, &XXXDlg::OnBnClickedModeRadio16)
ON_BN_CLICKED(IDC_MODE_RADIO17, &XXXDlg::OnBnClickedModeRadio17)
ON_BN_CLICKED(IDC_MODE_RADIO18, &XXXDlg::OnBnClickedModeRadio18)
ON_MESSAGE(IS_UEYE_MESSAGE, OnImageCatch)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_HISTORICAL_DATA, &XXXDlg::OnLvnItemchangedListHistoricalData)
ON_BN_CLICKED(IDC_BUTTON_HISTORICAL, &XXXDlg::OnBnClickedButtonHistorical)
END_MESSAGE_MAP()其中 ON_MESSAGE(IS_UEYE_MESSAGE, OnImageCatch)是个相机类消息函数,#define IS_UEYE_MESSAGE                     (WM_USER + 0x0100) 

解决方案 »

  1.   

    我没理解错的话你的问题通过重载OnOK函数就可解决
    怎么你搞的这么复杂
      

  2.   

    LRESULT CWholeBundleSteelBarCounterDlg::OnGetDefID(WPARAM wParam,LPARAM lParam)
    {
    DM_GETDEFID // 这个是干嘛?
    return MAKELONG(0,DC_HASDEFID);
    }
      

  3.   

       复查了,跟我重载的那个参数无关,界面按 Tab 键的时候会出这提示。然后在各个重载的函数里面 try catch都没捕捉到。
       COleException是com组件异常?我程序里面有用到MSCOM32通信控件,不是拖控件而是直接在程序里面敲代码实现的,在OnInitation里面直接调 Init函数进行初始化。
       IS_UEYE_MESSAGE消息是用来处理相机数据的,在界面上没有控件,是通过SDK实现,没有注册控件等其它操作,并且在其它使用它的项目中也未发现该异常。
     
    这个异常有时候按Tab键出现一条,有时候出现好几条,没有找到规律。重载OnOk,界面的X和菜单栏右键弹出的关闭就不响应。程序没崩溃,就是输出窗口有这提示,你的意思是用_CRT那条命令来跟踪?这个是个消息,用来屏蔽Enter键作为界面结束符的响应。这样其它按钮的Enter就能正常使用。
    比用Pre那个简单,不用再写针对哪些控件正常响应。
      

  4.   

    我问的是
    DM_GETDEFID // 这个是干嘛?
    加这句干嘛?