我正在使用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异常并且不重置控制字的后果是什么?
Default8087CW的值是否为进入C++函数时的实际值?还是C++ RTL认为是默认值?这两者可能有所不同。 –
@ 500-InternalServerError,我将如何检查?我所能确认的是,退出C++代码后的Default8087CW的值与输入时相同。 – Everett
我不熟悉如何在C++中执行此操作。没有相应的Get8087CW()函数吗? –