2010-03-23 4 views
5

से हाल ही में क्रैश हो गया है हमने हाल ही में VS 2005 से VS 2008 (Windows XP) में अपग्रेड किया है। हम अपनी परियोजनाओं में से एक में SlimDx का उपयोग करते हैं। सभी, अपग्रेड करने के बाद ठीक काम कर रहा था मेरी पुनर्प्राप्त समारोह, जिस पर devicelost/डिवाइस रीसेट जिसके साथSlimDX डिवाइस। रीसेट एक "D3DERR_INVALIDCALL: अमान्य कॉल (-2005530516)" त्रुटि

D3DERR_INVALIDCALL दुर्घटनाओं कहा जाता हो जाता है को छोड़कर: अमान्य कॉल (-2005530516)

मैं Ctrl का उपयोग - Alt - डेल और फिर भागने अनुकरण करने के लिए डिवाइस खो दिया है।

void Recover() 
{ 
    try 
    { 
     if (res.Code == D3DERR_DEVICENOTRESET) 
     { 
      res = m_device.Reset(m_presentParams); //Crashes on this. 
      if (res.IsSuccess) 
      { 
      m_deviceLost = false; 
      } 
      } 
    } 
    catch(Exception e) 
    {} 
} 

VS 2008 से कोई लेना देना यह कुछ के रूप में यह VS 2005 के साथ अच्छी तरह काम करने के लिए प्रयोग किया जाता है?

+0

डीबग स्पू में कुछ भी जो आपकी मदद करता है? – Goz

+0

"D3DERR_INVALIDCALL रीसेट" के लिए एक त्वरित खोज एमएसडीएन की ओर ले जाती है। "विधि कॉल अमान्य है। उदाहरण के लिए, किसी विधि के पैरामीटर में अमान्य मान हो सकता है।" तो मेरा सुझाव m_presentParams की जांच करना होगा; क्या इसमें वह जानकारी शामिल है जो आप इसकी अपेक्षा करते हैं? –

+3

हल हो गया: कुछ संसाधन (स्टेटब्लॉक) का निपटारा नहीं किया गया था। – ababeel

उत्तर

8

मुझे this forum post में कुछ उपयोगी जानकारी मिली। वीबी से संबंधित उस मंच पर सवाल पर ध्यान दें लेकिन यह अभी भी अच्छी जानकारी है। Simon O'Connor पर पूर्ण क्रेडिट।

पुन: स्वरूपित और थोड़ा संपादित किया गया।

INVALIDCALL आमतौर पर इसका मतलब है कि या तो आप जिस पैरामीटर को डी 3 डी पास कर चुके हैं वह अमान्य है या आपके द्वारा अनुरोधित ऑपरेशन संभव नहीं है।

सबसे आसान तरीका पता लगाने के लिए क्यों एक D3D कॉल लौटे एक INVALIDCALL त्रुटि यह आपको बता देना है:

  1. सुनिश्चित करें कि आप D3D क्रम का डीबग संस्करण उपयोग कर रहे हैं स्थापित किया गया है (यदि आप दिए गए थे विकल्प जब आपने एसडीके स्थापित किया था)।
  2. सुनिश्चित करें कि रनटाइम का DEBUG संस्करण सक्षम है। नियंत्रण कक्ष में डायरेक्टएक्स एप्लेट पर जाएं और डायरेक्ट 3 डी टैब के नीचे देखें।
  3. डायरेक्टएक्स नियंत्रण पैनल एप्लेट में, डायरेक्ट 3 डी के लिए डीबग आउटपुट स्तर को अधिकतम तक बढ़ाएं। मैंने 10 से अधिक वर्षों तक विजुअल बेसिक का उपयोग नहीं किया है, इसलिए मैं भूल गया हूं कि कौन सी डिबगिंग समर्थन उपलब्ध है और मैंने यह जांचने के लिए इस मशीन पर स्थापित नहीं किया है ... यदि वीबी में डीबग आउटपुट विंडो है:
  4. अपने प्रोग्राम को चलाएं और इसे INVALIDCALL त्रुटि से विफल होने दें।
  5. अब अपनी डीबग आउटपुट विंडो में सभी टेक्स्ट देखें। डी 3 डी जानकारी, चेतावनियां, और महत्वपूर्ण रूप से त्रुटियों को लॉग करेगा। यह कारण बताएगा कि एक डी 3 डी कॉल विफल क्यों हुआ है।

वीबी एक सरल डिबग आउटपुट खिड़की, डाउनलोड न हो, तो और http://www.sysinternals.com से DebugView चलाने के लिए या कमांड लाइन डिबग दर्शक है कि DirectX एसडीके

+0

दोस्त, ओप ने बहुत समय पहले समस्या हल की। ​​टिप्पणियां देखें ("कुछ संसाधन (स्टेटब्लॉक) का निपटारा नहीं किया गया था") – SigTerm

+4

@ सिगटर्म, हाँ , समझ गया। मेरे मामले में इसका स्टेटब्लॉक से कोई लेना देना नहीं है। यह एक सामान्य त्रुटि संदेश है, लेकिन इस एसओ पोस्ट में त्रुटि कोड के लिए उच्च Google रैंकिंग है, इसलिए मैंने आशा में यह जवाब दिया कि इससे किसी और को आने में मदद मिल सकती है एक खोज के माध्यम से। –

1

के साथ आता है का उपयोग यह आमतौर पर होता है जब आप नहीं था ' टी आप सभी संसाधनों का निपटान नहीं करते हैं (vertex बफर, बनावट, ...)

0
void Recover() 
{ 
    try { 
      if (res.Code == D3DERR_DEVICENOTRESET) 
      { 
       res = m_device.Reset(m_presentParams); //Crashes on this. 
       if (res.IsSuccess) 
       { 
         m_deviceLost = false; 
       } 
      } 
    } catch(Exception e) {} 
}