2012-05-29 72 views
0

我正在使用C#中的.NET 3.5應用程序,它定期調用一些傳統的C++代碼。我注意到,當將鼠標懸停在具有下拉列表的Infragistics UltraGrid上時,調用C++有時會導致「溢出或下溢算術操作」。我發現,在C++代碼執行以下操作時,這只是發生:在C++中重置8087CW導致.NET應用程序出現異常

Word SavedWord = Default8087CW; 
Set8087CW(0x133f); // Disable all fpu exceptions 

... 

Set8087CW(SavedWord); 

如果我註釋掉最後一行,我不再是我的.NET應用程序出現錯誤。我沒有注意到其他應用程序中的其他副作用。作爲一個快速解決方案,我想將此行註釋掉。禁用FPU異常並且不重置控制字的後果是什麼?

+0

Default8087CW的值是否爲進入C++函數時的實際值?還是C++ RTL認爲是默認值?這兩者可能有所不同。 –

+0

@ 500-InternalServerError,我將如何檢查?我所能確認的是,退出C++代碼後的Default8087CW的值與輸入時相同。 – Everett

+0

我不熟悉如何在C++中執行此操作。沒有相應的Get8087CW()函數嗎? –

回答

0

在其他機器上測試之後,似乎註釋掉Set8087CW(SavedWord);行只能解決我的機器上的問題。在我的Infragistics版本中似乎存在一個錯誤(8.2.2008.2204)。回滾到8.2.20082.1000確定了問題。

+1

嗯,可疑。有很多代碼與Borland運行時對FPU控制字的更改不兼容。 *任何* .NET代碼都會受到攻擊。考慮到你已經在你的程序中找到了這個片段,你必須已經遇到過這樣的代碼。這是另一個例子:http://stackoverflow.com/a/8357646/17034 –

+0

這是一個非常有趣的帖子,@HansPassant。我已經切換回Infragistics的新版本,並實施了這裏提到的解決方案。似乎工作。你想添加一個答案與該職位的參考? – Everett

相關問題