2015-07-31 4 views
12

विफल रहता है मेरे पास एक ऐसा एप्लिकेशन है जो निर्मित माइक्रोसॉफ्ट जीएस वेवेटेबल सिंथ पर निर्भर करता है। इसने विंडोज एक्सपी, विस्टा, 7, 8 और 8.1 पर बेकार ढंग से काम किया है। जबकि विंडोज़ 10 पर midiOutOpen पर पहला कॉल काम करता है, बाद में कॉल के परिणामस्वरूप त्रुटि कोड 1 होता है, जिसका अर्थ है 'निर्दिष्ट त्रुटि'। कोड सरल है:माइक्रोसॉफ्ट जीएस वेवेटेबल सिंथ का उपयोग कर विंडोज 10 पर midiOutOpen

result = midiOutOpen(&_midiOutHandle, midiOutputDevice, NULL, 0, CALLBACK_NULL); 

इस बेहद सराहना को हल करने के तरीके के बारे में कोई भी विचार।

उत्तर

10

मुझे यह दिखाई देता है। मशीन कोड के माध्यम से ट्रेसिंग, मैं modMessage() फ़ंक्शन विफल रहता हूं और MMSYSERR_ERROR लौटाता हूं। वास्तव में मुझे क्यों स्पष्ट नहीं है, यह एक लापता प्रारंभिक समस्या की तरह दिखता है।

इस दुर्घटना के बारे में अजीब बात यह है कि इसके बारे में बहुत सी शिकायतें नहीं हैं, आप उम्मीद करेंगे कि अन्य कार्यक्रम भी खत्म हो जाएंगे। या Win10 भेजे जाने से पहले उन मामलों के लिए परीक्षण किया जाना चाहिए। अगली बात मैंने कोशिश की है कि एक ऐसी चीज जो किसी भी गैर-तुच्छ ऑडियो एप्लिकेशन में होती है जो मैंने अपने परीक्षण कार्यक्रम में छोड़ी है। आंशिक रूप से modMessage के प्रतीकों में "एटीएल" देखकर प्रेरित, हालांकि यह कहीं भी करीब नहीं था। मैंने इसे मुख्य में पहली पंक्ति के रूप में जोड़ा():

CoInitializeEx(NULL, COINIT_MULTITHREADED); 

Badaboom, और कोई त्रुटि नहीं। यदि आप इसे UI थ्रेड के मुख्य थ्रेड पर कॉल करते हैं तो COINIT_APARTMENTTHREADED का उपयोग करें। साफ करने के अंत में CoUninitialize()।

यह समझा जाना मुश्किल है, जब आप MIDI का उपयोग करते हैं तो COM प्रारंभ करना आवश्यक नहीं होना चाहिए। इसके साथ में, midiOutOpen को कॉल करने से एक और डीएलएल लोड हो जाता है, clbcatq.dll। यह एक COM + समर्थन मॉड्यूल है। तो निश्चित रूप से Win10 की तरह दिखता है कि COM को प्रारंभ किया जाना आवश्यक है।

+0

इस पर ध्यान देने के लिए धन्यवाद - आपका कामकाज मेरे लिए काम करता है! – Cam

+0

बहुत सारे कार्यक्रम _do_ गिरते हैं। लेकिन कम बजट वाले प्रोग्रामर के पास Win10 परीक्षण के रिलीज होने से पहले अतिरिक्त मशीन नहीं थी ... और उन्हें उम्मीद थी कि एम $ संगत रहने के लिए ............. वैनबास्को कराओके प्लेयर वह एक है जो गिरता है ... जब तक आप क्लिक नहीं करते? (सहायता) आइकन जो स्पष्ट रूप से COM का उपयोग/प्रारंभ करता है। – Victoria

1

मैंने मिडीऑट ओपेन से पहले एक संदेश बॉक्स (कहने के लिए कुछ भी महत्वपूर्ण नहीं) रखा है, और आईटी काम करता है! मैं विजुअल स्टूडियो 2013 सी ++ का उपयोग कर रहा हूं।

WASAPI अब साझा करने के तरीके में मेरे लिए काम नहीं करता है, हालांकि मुझे लगता है कि मैं इसे काम करने में सक्षम हूं।

+0

आपके उत्तर के लिए धन्यवाद, मैं वास्तव में आपके इनपुट की सराहना करता हूं। हालांकि, जब भी वे स्टार्ट बटन दबाते हैं, तो मैं अपने उपयोगकर्ताओं को एक खाली संदेश बॉक्स बंद करने के लिए मजबूर नहीं कर सकता। क्या आपको कोई विचार है कि यह क्यों काम करता है? – fhevol

1

जब मैं CoInitializeEx(NULL, COINIT_MULTITHREADED) का उपयोग करता हूं, तो यह मिडी खुली समस्या के लिए मदद करता है लेकिन एमपी 3 गीत खोलने के साथ mciSendString का उपयोग करने के लिए इसका बुरा प्रभाव पड़ता है, जिसके परिणामस्वरूप हमेशा एक ही प्रोग्राम में त्रुटि 266 होती है। उदाहरण के लिए .:

open "d:\\music\\Fernando.mp3" type MPEGVideo alias Fernando.mp3 wait 

(CoInitializeEx इस खुले काम करता है और एमपी 3 गीत के बिना Windows 10 में खेलता है)।

कुछ विंडोज 10 सिस्टम पर मिडी और एमपी 3 CoInitializeEx पर कॉल किए बिना अच्छी तरह से खुलता है, अन्य पर यह मिडी नहीं खेलता है। यह एमसीआई एपीआई में दस्तावेज नहीं है कि इसे अनिश्चित समस्याओं का कारण बनना चाहिए और इसका कारण बनना चाहिए। मेरे लिए यह स्पष्ट नहीं है कि इसे कब या क्यों कहा जाना चाहिए और जब मुझे इसे बेहतर नहीं कहना चाहिए। माइक्रोसॉफ्ट के एमसीआई से संबंधित विंडोज 10 असंगतता असहिष्णु है। XP के बाद से सभी सिस्टम एमसीआई संगत हैं और केवल विंडोज 10 परेशानी का कारण बनता है।