程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 一個COM調用時出現的錯誤及解決辦法

一個COM調用時出現的錯誤及解決辦法

編輯:.NET實例教程

這兩天一直在用COM裡的復合文檔來做個東東。我通過C#的平台調用方法使用IStorageIStream這些接口的,並寫了一個流類來包裝IStream。在“調試”模式下,運行得很好,但是在“Release”下,則報錯了!

症狀為:

在長時間讀寫一個復合文檔時,開始是可以正常運行的,但是一段時間後,就會報錯

說“試圖使用一個不存在的對象異常來自HRESULT 0x800030100 STG_E_REVERTED ”

而且問題是在Debug模式下,根本不出現這個問題,問題只出現在Release模式下。


開始我以為是和COM平台調用時的問題,看遍了MSDNGoogle上能找到的相關資料,都沒有提到類似的錯誤。沒辦法,我只能一段代碼一段代碼來查找原因。考慮到錯誤是引用了一個不存在COM對象,那麼有可能是COM中對象計數器的問題,我想是不是什麼的代碼導致釋放了引用COM對象的變量。

整整花了近六個小時,我才發現我犯了一個基本錯誤。我在包裝類裡寫一個析構函數

~StorageStream()

{

this.Dispose();

}

 

而我的主程序源代碼比較長,不貼出來了,大概如下面代碼

1 Storage storage = Storage.CreateStorageFile(...);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved