服务器端自己定义的异常类是不是没法在客户端捕获?不符合com规范? 服务器端com组件的异常信息怎么被客户端捕获?我想自己定义异常类,不用_com_error的,该怎么做呢?或者派生一个?怎么定义呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 uses the IErrorInfo interface to report errors back to the client, your object must also support the ISupportErrorInfo interface. 恩?我用atl做的类实现了ISUPPORTERRORINFO接口,调用Error("wrong!")方法抛出异常。然后在客户端捕获,这样客户端应该不用实现ISupportErrorInfo吧?但是我的客户端的IErrorInfo接口的指针总是得不到,为0,为什么呢????服务器端: if(!g_adoConn.ExecuteSQL(bufSQL)) {return Error("Wrong", IID_IUserManager); } return S_OK;客户端代码: HRESULT hr; try { // See if the object supports rich error info ISupportErrorInfo* pSEI = 0; hr = pUnk->QueryInterface( IID_ISupportErrorInfo, (void**) &pSEI ); if (SUCCEEDED( hr )) { hr = pSEI->InterfaceSupportsErrorInfo( riid ); if ( SUCCEEDED( hr )) { // Get the error info IErrorInfo* pEI; //下面这句总是错的!pEI = 0x000000 if ( SUCCEEDED( GetErrorInfo( 0, &pEI ))) { USES_CONVERSION; BSTR bstrDescription = 0; BSTR bstrSource = 0; pEI->GetDescription( &bstrDescription ); pEI->GetSource( &bstrSource ); ::MessageBox(NULL, (char*)bstrDescription, "dlg", MB_OK); //cout << OLE2T( bstrSource ) << endl; ::SysFreeString( bstrDescription ); ::SysFreeString( bstrSource ); pEI->Release(); } } pSEI->Release(); } } catch(_com_error& e) { ::MessageBox(NULL, (char* )e.Description(), "´íÎó£¡", MB_OK); } catch(...) { } CString情况,滚动条怎样显示底端新写入的内容? QQ斗地主实现原理 大家有没有听说过阿里巴巴的客户信息被人强行搜索这样的新闻阿? 为什么会出现这样的问题呢???在VF中也一样 CSDN上怎么也没人知道呢,, 我在程序中对WIN2K中的dll文件调用,但老是说不能load,这是什么原因。 我想把对话框的一部分显示出来,另一部分暂时隐藏,请问有什么办法??? 计算机英语,帮我看看对不对 我自己写的类(不继承任何MFC类)里如何使用timer? _variant_t 是个什么东西? 请问怎么删除注册表里一个键下的所有键值? WINDOWS数据类型的问题
然后在客户端捕获,这样客户端应该不用实现ISupportErrorInfo吧?
但是我的客户端的IErrorInfo接口的指针总是得不到,为0,为什么呢????
服务器端:
if(!g_adoConn.ExecuteSQL(bufSQL))
{return Error("Wrong", IID_IUserManager);
} return S_OK;客户端代码:
HRESULT hr; try
{
// See if the object supports rich error info
ISupportErrorInfo* pSEI = 0;
hr = pUnk->QueryInterface( IID_ISupportErrorInfo, (void**) &pSEI );
if (SUCCEEDED( hr ))
{
hr = pSEI->InterfaceSupportsErrorInfo( riid );
if ( SUCCEEDED( hr ))
{
// Get the error info
IErrorInfo* pEI;
//下面这句总是错的!pEI = 0x000000
if ( SUCCEEDED( GetErrorInfo( 0, &pEI )))
{
USES_CONVERSION; BSTR bstrDescription = 0;
BSTR bstrSource = 0; pEI->GetDescription( &bstrDescription );
pEI->GetSource( &bstrSource ); ::MessageBox(NULL, (char*)bstrDescription, "dlg", MB_OK);
//cout << OLE2T( bstrSource ) << endl; ::SysFreeString( bstrDescription );
::SysFreeString( bstrSource ); pEI->Release();
}
}
pSEI->Release();
}
}
catch(_com_error& e)
{
::MessageBox(NULL, (char* )e.Description(), "´íÎó£¡", MB_OK);
}
catch(...)
{
}