.NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
来源:互联网 发布:搜狗网络推广怎么样 编辑:程序博客网 时间:2024/04/29 10:54
当调用IDispatch::Invoke函数的时候,当函数调用过程中抛出了异常,Invoke函数会返回DISP_E_EXCEPTION,代表异常发生。Invoke函数的pExceptionInfo参数可以提供关于异常的有关信息:
IDispatch *pDisp;
EXCEPINFO excepInfo;
HRESULT hr = pDisp->Invoke(…, &excepInfo);
if( hr == DISP_E_EXCEPTION )
{
// 使用excepInfo获得异常信息
}
当pDisp指向一个托管对象(Managed Object)的时候,excepInfo并不能提供足够的信息。这个时候我们可以使用IErrorInfo和_Exception接口来获得托管的异常信息。_Exception是mscorlib.dll提供的对托管异常的支持的接口(mscorlib.dll同时还有大量的接口可以供Interop的时候使用),可以通过#import来导入mscorlib.dll中的COM接口:
// 导入.NET Framework 2.0版本中的mscorlib.dll的Type Library
#import "C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.tlb" no_namespace named_guids raw_interfaces_only
之后,当Invoke返回DISP_E_EXCEPTION的时候,调用::GetErrorInfo函数获得IErrorInfo对象:
IDispatch *pDisp;
EXCEPINFO excepInfo;
HRESULT hr = pDisp->Invoke(…, &excepInfo);
if( hr == DISP_E_EXCEPTION )
{
IErrorInfoPtr pErrorInfo;
:GetErrorInfo(0, &pErrorInfo);
IErrorInfo所指向的错误对象当抛出托管异常的时候,将会支持_Exception接口,这个接口可以通过一个QueryInterface获得。通过智能指针,只需简单做一个赋值即可。
// 获得错误对象的_Exception接口
_ExceptionPtr pException = pErrorInfo;
之后,便可以使用_Exception接口所支持的各种方法来获得托管异常的有关信息了,比如:
// 将_Exception转换成字符串,用于显示
_bstr_t bstrString;
pException->get_ToString(bstrString.GetAddress());
}
作者: ATField
Blog: http://blog.csdn.net/atfield
转载请注明出处
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 今天David Solomon的为期三天的Windows Internal培训刚结束
- 转贴:Mark Russinovich的Inside Vista Kernel系列文章,讲到了Vista内核的调度,IO,内存管理,缓存,事务处理,安全等众多新特性
- 转载:如何指定程序在Vista上面需要提升权限运行(Elevated)
- 如何知道可执行文件是32-bit还是64-bit
- .NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
- Microsoft Silverlight正式发布
- 国际化编程中Locale相关概念的一些解释
- PIA (Primary Interop Assembly) & AIA (Alternate Interop Assembly)简介
- 进程编程3 - UNIX高级环境编程第9章读书笔记
- 转贴:libunwind文档
- java.lang.SecurityException: untrusted domain is not configured
- 进程编程2 – Unix环境高级编程8章读书笔记
- WPF/E简介