D3DX .dll नरक से कैसे निपटें?


16

प्रत्येक एसडीके अपडेट से डी 3 डीएक्स डीएल के संस्करणों की एक बड़ी संख्या है, प्रत्येक संस्करण का एक अनूठा नाम ( डी 3 डीएक्स डीएल नामों की सूची ) है।

सभी-अक्सर, लोगों के पास लापता संस्करण होते हैं। भले ही उनके पास DirectX का एक संगत संस्करण हो, लेकिन आपका D3D- आधारित प्रोजेक्ट उनकी मशीन पर नहीं चलेगा।

मैं एक इंस्टॉलर की आवश्यकता के बिना एक साधारण ज़िप फ़ाइल के रूप में गेम (थोड़े खाली समय की परियोजनाएं, गेम जाम प्रविष्टियां, आदि) वितरित करने में सक्षम होना चाहता हूं। लेकिन उपयोगकर्ताओं का एक महत्वपूर्ण प्रतिशत लापता डी 3 डीएक्स। डीएल त्रुटियों में चलता है। और इंस्टॉलर के बिना, माइक्रोसॉफ्ट का आधिकारिक समाधान (डायरेक्टएक्स वेब इंस्टॉलर / अपडेटर) वास्तव में समाधान का एक हिस्सा नहीं है।

दुर्भाग्य से, Microsoft अभी भी हमें D3DX (जो एक अच्छा साफ समाधान होगा) को स्थिर लिंकिंग का विकल्प नहीं देगा। और डी 3 डीएक्स का उपयोग करने से बचना बहुत व्यावहारिक नहीं है, खासकर यदि आप शेड्स के साथ काम कर रहे हैं (और नहीं, मैं अभी ओपनजीएल पर स्विच नहीं कर रहा हूं, फिलहाल)

किसी को भी इस DLL नरक से बचने के लिए चतुर समाधान है?


2
स्टैक ओवरफ्लो ( stackoverflow.com ) से बेहतर प्रतिक्रियाएं मिल सकती हैं - भले ही यह आपके गेम पर लागू हो, यह वास्तव में प्रोग्रामिंग है। इस बीच ... क्या आप केवल अपने निष्पादन योग्य के रूप में DLL को एक ही फ़ोल्डर में नहीं रख सकते हैं?
Ricket

हम्म् ... क्या यह इस समस्या को कम करने के लिए सबसे पुराने संभव DX9 एसडीके संस्करण को वापस लेने के लिए एक मूर्खतापूर्ण विचार होगा? चीजों को करने का एक पागल तरीका लगता है, लेकिन एमएस ने वास्तव में एक कष्टप्रद समस्या पैदा की है। एक और समान रूप से पागल विकल्प खरोंच से सबसे महत्वपूर्ण डी 3 डीएक्स कार्यक्षमता को फिर से लागू करना होगा, लेकिन मुझे प्रभाव प्रणाली का फिर से आविष्कार नहीं करना है ...
उदास

हाल के एसडीके में (पिछले साल के कुछ समय के अनुसार मुझे लगता है) प्रभाव उपतंत्र काफी हद तक 10+ के लिए कोर और डी 3 डीएक्स एसडीके से बाहर चला गया था । आप इसे स्वयं संकलित कर सकते हैं, वास्तव में - कोड एसडीके में है और पुनर्वितरण योग्य है (जैसा कि इसके द्वारा उत्पादित बायनेरिज़ हैं)। 9 के साथ काम करने के लिए सिस्टम को वापस पोर्ट करना शायद आसान है, और डी 3 डीएक्स के बाकी हिस्सों को फिर से लागू करना या इसके लिए विकल्प ढूंढना बहुत आसान है।

2
D3dx का उपयोग न करें। इसके तेज / अच्छे / कुशल / शांत रास्ते लगभग नहीं।

मैं DirectX गणित, जाल, बनावट और सामान्य सहायक सामान पर पारित कर सकता था - लेकिन वास्तव में D3DXEffect को नहीं छोड़ सकता। और मैं हमेशा के लिए DX9 अधिक-या-कम के साथ फंस गया हूं। और जहां तक ​​मेरा संबंध है, DX10 + मौजूद नहीं है, क्योंकि वे XP पर मौजूद नहीं हैं
ब्लूज़क्रान

जवाबों:


17

दुर्भाग्य से, इंस्टॉलर बनाने के अलावा इसके लिए एक अच्छा, कानूनी समाधान नहीं है, क्योंकि आपके हाथ डायरेक्टएक्स एसडीके द्वारा आपको दिए गए वितरण अधिकारों से बंधे हैं, जो डी 3 डीएक्स डीएल प्रदान करता है। लाइसेंस समझौते की शर्तों के तहत आप एसडीके (जो (SDK Install Directory)/Documentation/License Agreements/आप में स्थित है) का उपयोग करके बाध्य हैं, केवल कुछ नमूना और उपयोगिता कोड के साथ एसडीके के कुछ सबसेट के द्विआधारी रूपों को पुनर्वितरित करने की अनुमति है।

जून 2010 SDK के अनुसार, आपने "Redist" निर्देशिका में कुछ भी पुनर्वितरित करने की अनुमति दी है और ऐसा करते समय आपको कुछ घटकों (DSetup32.dll, DSetup.dll, DXSetup.exe, DXupdate.cab और dxdllreg_x86.cab) को शामिल करना होगा। Redist निर्देशिका में D3DX DLL के लिए .cab फाइलें शामिल हैं, लेकिन DLL खुद नहीं, इसलिए आप भाग्य से बाहर हैं।

यह एक संस्थापक, सौभाग्य से, यह सिर्फ उचित D3DX चलाता निर्माण करने के लिए बहुत कठिन नहीं है वेब संस्थापक या whatnot कि है कुछ आप पुनर्वितरित। सिंपल .msi इंस्टॉलर यूजर्स के लिए उतने ही आसान होते हैं जिनका इस्तेमाल करना (डबल-क्लिकिंग आम तौर पर सभी की जरूरत होती है) और मनमानी निर्देशिकाओं में इंस्टॉलेशन की अनुमति देने के लिए कॉन्फ़िगर किया जा सकता है, अगर आप प्रोग्राम फाइल डायरेक्टरी के साथ "प्रदूषण" के बारे में किसी कारण से चिंतित हैं। इन छोटे फेंक-दूर कार्यक्रम। उचित रूप से कॉन्फ़िगर किए गए इंस्टॉलर के डाउनलोड आकार में ओवरहेड काफी छोटा हो सकता है, साथ ही, ताकि बहुत अधिक समस्या न हो।

EDIT: यहां DX स्थापना सामग्री के बारे में एक अच्छा पृष्ठ है

EDIT 2: टिप्पणियों में सुधार के जवाब में "वेब" बिट को हटा दें।


3
आपको वेब इंस्टॉलर को पुनर्वितरित करने की अनुमति नहीं है, बस उन्हें microsoft.com पृष्ठ (इसलिए आदर्श नहीं) पर इंगित करें, और पुनर्वितरण योग्य घटक न्यूनतम 3Mb ('वास्तविक गेम' के आकार की तुलना में महत्वहीन हैं, लेकिन नहीं थोड़े खाली समय के प्रोजेक्ट्स के लिए)
Bluescrn

एर, हाँ, आप सही हैं, मैं वेब इंस्टॉलर के बारे में याद करता हूं।

2

चार मुख्य समाधान वसंत के लिए मन।

पहले एक डायरेक्टएक्स एसडीके के पुराने संस्करण का उपयोग करना है। मुझे याद है कि राउंडअबाउट 2004 या उससे पहले के संस्करण वैधानिक रूप से जुड़े हुए थे (लेकिन यदि कोई बड़ा निष्पादन योग्य आकार आपको डराता है जो एक विकल्प नहीं हो सकता है), और यह भी मामला है कि यदि आप 2006/2007 या उससे पहले के संस्करण का उपयोग करते हैं तो डी 3 डीएक्स डीएलएल की आपको मशीन पर होने के लिए बहुत अधिक मौका मिलेगा। इसका नकारात्मक पक्ष यह है कि आप बग एसडीके, प्रदर्शन संवर्द्धन और नई एसडीके में बेहतर कार्यक्षमता को याद कर रहे हैं (यह 9 के अलावा अन्य डी 3 डी के किसी भी संस्करण को नियमबद्ध करता है)।

दूसरा समाधान डी 3 डीएक्स फ़ंक्शंस पर लोडलॉउड और गेटप्रोकड्रेस का उपयोग करना है। आप एक अधिकतम और न्यूनतम समर्थित संस्करण चुनते हैं (कहते हैं, _42 से _34 तक), फिर अधिकतम से न्यूनतम तक लूप में जाएं, डीएलएल नाम का निर्माण करें, और इसे लोड करने का प्रयास करें। यदि आप इसे ठीक से लोड करते हैं, तो आप GetProcAddress कॉल का एक गुच्छा करते हैं और कच्चे D33X फ़ंक्शन के बजाय अपने फ़ंक्शन पॉइंटर्स का उपयोग करते हैं। OpenGL एक्सटेंशन की तरह, अगर आप जानते हैं कि मैं किस बारे में बात कर रहा हूं। यह संभावित रूप से थोड़े बालों वाला है, और आपको अभी भी उस मामले से निपटना पड़ सकता है जहां आप अपनी सीमा में कोई डीएलएल नहीं पा सकते हैं। लेकिन मैंने अतीत में इसका उपयोग किया है और यह काफी अच्छी तरह से काम करता है।

तीसरा समाधान सिर्फ डी 3 डीएक्स का उपयोग नहीं करना है। कुछ मामलों में एक विकल्प हो सकता है, आपके मामले में एक विकल्प नहीं हो सकता है।

चौथा और अंतिम समाधान सिर्फ अपने उपयोगकर्ताओं को अपने डायरेक्ट 3 डी को अपग्रेड करने के लिए कहना है। वे वास्तव में वैसे भी यह कर रहे होंगे, यह Microsoft से एक छोटा और तेज़ डाउनलोड है, और यह एक त्वरित समस्या है। आपके उपयोगकर्ताओं को ऐसा करना पसंद नहीं हो सकता है, और आपको "मुझे पहले से ही डी 3 डी 11 मिल गया है, मुझे अपने डीबीडी 9 को अपग्रेड करने की आवश्यकता क्यों है" जैसे सवालों से निपटना पड़ सकता है, लेकिन संतुलन के लिए यह अधिक किफायती हो सकता है। यह नाक पर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.