请看以下的mfc代码 片段
BOOL CADO::RstAddNew(_RecordsetPtr &mf_precordset)
{
try
{
mf_precordset->AddNew();
return TRUE;
}
catch(_com_error &tmp_error)
{
m_error = tmp_error;
m_errorvalue1 = (CONST TCHAR * )tmp_error.Source();
m_errorvalue2 = (CONST TCHAR * )tmp_error.Description();
m_errorvalue3 = tmp_error.ErrorMessage();
m_errorvalue4.Format(_T("0x%08lp"),tmp_error.Error());
m_errormessage.Format(_T("[CADOERROR]%s\r\n[错误信息] %s\r\n") \
_T("[错误代码] %s\r\n") \
_T("[HRESULT] %s\r\n") \
_T("[错误提示]数据库记录集发生错误!"),
m_errorvalue1,
m_errorvalue2,
m_errorvalue3,
m_errorvalue4);
::MessageBox(NULL,m_errormessage,_T("CADO"),MB_ICONWARNING|MB_OK);
// 我能在这个位置抛出 throw m_error 吗?
return FALSE;
}
}
如上述代码 CADO类是我封装ado的某些方法,以便更快捷的连接和使用数据库的,m_error是CADO的成员变量 其原型为:_com_error CADO::m_error;我的问题如下:
1.1 _com_error 能够使用点操作符. 或指针的指向操作符->请问 _com_error 是类 还是类型 还是结构体?
继续请看以下代码
void CDemoDlg::OnBnClickedButton1()
{
try
{
g_app_ado.RstAddNew(); //CADO g_app_ado 是全局的,已事先定义清楚。
}
catch(_com_error * e)
{
// 对封装后的成员函数仍然捕获错误 我想二次捕获的是CADO类 try catch 抛出的 m_error 错误,结合第一段代码 可能实现吗?
}
}
1.2 对封装后的成员函数仍然捕获错误 我想捕获的是CADO类 try catch 抛出的 throw m_error 错误,结合第一段代码 可能实现吗?可以将就使用_com_error吗?需不需要单独创建属于我程序的异常类呢?
1.3 假设用户现已经核实清楚原因 发现为网络断线,断线重连后,现在还在catch 块里边 因为当初执行g_app_ado.RstAddNew();已经失败了,现在更新了连接 应当如何跳出catch块 重新再次执行g_app_ado.RstAddNew();?
请继续看以下代码:
void CDemoDlg::OnBnClickedButton1()
{
try
{
//使用ado可能发生错误
}
catch(_com_error e //_com_error & e _com_error * e)
{
//在此处理ado所发生的错误
}
}
1.4 捕获错误的时候方法五花八门的 有人用对象变量,有人用引用,有人用指针,这里应该用哪种形式才是正确的呢?