2008-10-10 11 views
5

मैं एफपीयू के लिए CTRL रीसेट कर सकते हैं इस के साथ पंजीकृत:मैं एफपीयू सीटीआरएल रजिस्टरों को कैसे सेट और पुनर्स्थापित कर सकता हूं?

http://support.microsoft.com/kb/326219

लेकिन मैं वर्तमान रजिस्टरों कैसे बचा सकते हैं, और बाद में उन्हें बहाल कर सकते हैं?

यह .net कोड से है ..

मैं क्या कर रहा हूँ, डेल्फी एक COM मॉड्यूल के रूप में एक .net dll कॉल करने से है। डेल्फी उपज में Ctrl रजिस्टरों की जांच करना एक मान है, .NET कोड में controlfp के साथ जांचना एक और मान देता है। मैं क्या जरूरत है, आवश्यक है यह करने के लिए है:

_controlfp(_CW_DEFAULT, 0xfffff); 

तो .net कोड में मेरी floatingpoint गणना दुर्घटना नहीं है, लेकिन मैं जब लौटने Ctrl रजिस्टरों पुनर्स्थापित करना चाहते हैं।

शायद मैं नहीं कर सकता? शायद जरूरत पड़ने पर डेल्फी उन्हें रीसेट कर रहा है? मैंने इस समस्या के बारे में ब्लॉग किया here

उत्तर

7
uses 
    SysUtils; 

var 
    SavedCW: Word; 
begin 
    SavedCW := Get8087CW; 
    try 
    Set8087CW($027f); 
    // Call .NET code here 
    finally 
    Set8087CW(SavedCW); 
    end; 
end; 
5

वही फ़ंक्शन जिसका उपयोग आप उन्हें बदलने के लिए करते हैं: _controlfp()। यदि आप 0 का मुखौटा पास करते हैं, तो वर्तमान मान को बदला नहीं जाएगा, लेकिन वापस लौटाया जाएगा - इसे सहेजें, और बाद में इसे पुनर्स्थापित करने के लिए _controlfp() पर दूसरी कॉल का उपयोग करें।

+0

अच्छा विचार, समस्या यह है कि मुझे समझ में नहीं आया कि मुखौटा आदि में क्या रखा जाए, लेकिन डेल्फी विधि Set8087CW बहुत अच्छा था। – neslekkiM

+0

हाँ ... आपने उल्लेख नहीं किया था कि आप डेल्फी का उपयोग कर रहे थे, इसलिए मैंने सी/सी ++ माना। – Shog9

संबंधित मुद्दे

 संबंधित मुद्दे