/ / Resetovanie 8087CW v C ++, čo spôsobuje výnimku v .NET aplikácii - c ++, .net, infragistics, x87

Resetovanie 8087CW v C ++ spôsobuje výnimku v .NET aplikácii - c ++, .net, infragistics, x87

Pracujem s .NET 3.5 v C #, ktorý pravidelne volá niektorý starší C ++ kód. Všimol som si, že volanie do C ++ niekedy vedie k "pretečeniu alebo podtokovej aritmetickej operácii", keď som myšou cez Infragističnú UltraGrid, ktorá má rozbaľovací zoznam. Zistil som, že sa to stane len vtedy, keď sa kódy C ++ urobia nasledovne:

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

...

Set8087CW(SavedWord);

Ak poznám posledný riadok, už sa nedostanemchyba v mojej .NET aplikácii. V ostatných častiach aplikácie som si všimol akékoľvek vedľajšie účinky.Ako rýchla oprava by som chcel opustiť tento riadok komentovaný Aké sú dôsledky vypnutia výnimiek FPU a nie resetovanie riadiaceho slova?

odpovede:

2 pre odpoveď č. 1

Riešenie sa nachádza tu: "StackOverFlowException v WPF pri metóde volania z knižnice C ++".

Vďaka Hans Passantovi za to.


0 pre odpoveď č. 2

Po testovaní na iných strojoch sa to ukazujekomentovanie Set8087CW (SavedWord); line len rieši problém na mojom počítači. Zdá sa, že existuje chyba v mojej verzii Infragistics (8.2.20082.2204). Vrátenie sa do 8.2.20082.1000 vyriešilo problém.