我在Delphi XE2中的兩個單獨項目中創建了兩個activex組件。其中一個組件完美工作,它引發的每個異常都會被屏蔽爲EOleException。在另一個activex組件上,異常不會被屏蔽,它們將作爲其原始類型拋出。客戶端是一個delphi XE程序。ActiveX不會提升EOleException
當activex組件引發原始異常時,下一次對組件中任何其他方法的調用將在它不應該引發的位置拋出Access Violation異常,如使用值設置本地字符串變量。這是一個非常奇怪的行爲。
我比較了兩個項目的.ridl文件,編譯選項,.dproj文件,並且找不到罪魁禍首。
任何人都知道這種差異/奇怪行爲的原因?
感謝
編輯:一些代碼
組件1,工程(屏蔽所有例外EOleException)
TspdMyClassX = class(TActiveXComponent, MyInterface)
...
initialization
TActiveXComponentFactory.Create(
ComServer,
TspdMyClassX,
CLASS_spdMyClassX,
1,
'',
0,
tmBoth);
該做的其他組件不是拋出EOleException有不同的接口,但其餘的代碼是相同的初始化,父類TActiveXComponent)
請顯示一些實際的代碼。 – 2013-04-23 20:11:31
您是否比較過「使用」條款中包含的單位的順序?如果兩個包含的文件都處理異常,那麼它可能使用兩個項目之間不同單元的代碼。它使用它首先找到的代碼,從'uses'子句中的最後一個單元開始,並從那裏開始向後工作。 – 2013-04-24 04:10:25
我發現如果我定義了一個不帶任何參數且沒有返回值的方法,那麼該組件將屏蔽使用EOleException在方法內生成的異常。當方法有返回值或參數時,異常不會被屏蔽。我正在從零開始在delphi 7上做同樣的項目,看看它是否是一些delphi xe2相關的錯誤。 – 2013-04-24 12:30:38