.NET Interop: 從IErrorInfo錯誤物件獲得託管程式碼的異常資訊
當呼叫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介面 |
之後,便可以使用_Exception介面所支援的各種方法來獲得託管異常的有關資訊了,比如:
// 將_Exception轉換成字串,用於顯示 _bstr_t bstrString; } |
作者: ATField
Blog: http://blog.csdn.net/atfield
轉載請註明出處
相關文章
- 異常錯誤資訊處理
- [.net 物件導向程式設計進階] (8) 託管與非託管物件程式設計
- 如何獲得COM的Interop互動庫C#原始碼C#原始碼
- ORACLE 異常錯誤 錯誤號大全Oracle
- .NET----錯誤和異常處理機制
- oracle異常捕獲程式碼(轉)Oracle
- PHP錯誤和異常PHP
- Swift 中的錯誤與異常Swift
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- 託管與非託管的混合程式設計程式設計
- python錯誤與異常Python
- Flutter之異常和錯誤Flutter
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- php錯誤及異常捕捉PHP
- 常見 HTTP 錯誤程式碼大全HTTP
- MySql 常見錯誤程式碼大全MySql
- go fiber: 把異常資訊寫到錯誤日誌中Go
- Java面試題:SpringBoot異常捕獲,讓程式“免疫”一切錯誤!Java面試題Spring Boot
- 錯誤和異常 (一):錯誤基礎知識
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- GoFrame 最佳化介面的錯誤碼和異常的思路GoFrame
- 如何從Spring之外的非託管物件訪問 Spring Bean?Spring物件Bean
- springboot利用快取儲存物件從新獲取異常Spring Boot快取物件
- 《從零開始學Swift》學習筆記(Day 62)——Core Foundation框架之記憶體託管物件與非託管物件Swift筆記框架記憶體物件
- 淺析php中的異常與錯誤PHP
- pl/sql中錯誤的異常處理SQL
- MySQL常見錯誤程式碼及程式碼說明MySql
- git提交程式碼託管平臺流程Git
- Git程式碼託管常用命令Git
- 異常機制與遮蔽除錯程式碼除錯
- Silverlight 呼叫自託管的wcf 報跨域異常的處理跨域
- thinkphp原始碼分析(四)—錯誤及異常處理篇PHP原始碼
- 管中窺豹----.NET Core到.NET 8 託管堆的變遷
- Mac下php常見錯誤資訊MacPHP
- asp.net iis7預設文件錯誤異常的解決方法ASP.NET
- web前端之異常/錯誤監控Web前端
- php錯誤與異常處理方法PHP