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ď č. 1Rieš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.