के एक अलग संस्करण के साथ संकलित किया गया था हम डेल्फी XE6 में वीसीएल में बग फिक्स कर रहे हैं। अब तक फ़ोल्डर में शामिल हैं:F2051: यूनिट% s को% s
| VCL Source Fixes
|----- Vcl.ComCtrls.pas
|----- Winapi.CommCtrl.pas
और हम अपने लाइब्रेरी खोज पथ के लिए फ़ोल्डर जोड़ने:
साथ ही हमें पता चला कि हम करने के लिए हमारे फिक्स सीमित करने के लिए है कि implementation
सेक्शन केवल। अन्यथा interface
अनुभाग में प्रतीकों के हैश हस्ताक्षर अनुभाग परिवर्तन। इससे लिंकर को एहसास होता है कि डीसीयू के अंदर के प्रतीक समान संस्करण नहीं हैं।
महत्वपूर्ण अवधारणा प्रतीक संस्करण का है:
Barry Kelly इस व्यवहार के लिए एक अच्छा विवरण था। डीसीयू को सहेजते समय, डेल्फी इंटरफ़ेस घोषणा पर प्रतीक के आधार पर हैश की गणना करता है और इसे प्रतीक के साथ जोड़ता है। प्रतीक का उपयोग करने वाली अन्य इकाइयां प्रतीक संस्करण भी संग्रहित करती हैं। इस तरह, अधिकांश सी लिंकर्स के विपरीत, बालों के प्रतीकों के कारण लिंक-टाइम विवादों से बचा जाता है।
इस का नतीजा यह है कि आप अपने दिल की सामग्री के लिए लगभग अपने प्रोजेक्ट में Classes.pas जोड़ने के लिए और संशोधित अपने कार्यान्वयन अनुभाग, और अभी भी स्थिर लिंक करने में सक्षम हो RTL के बाकी के साथ में सक्षम होना चाहिए है और वीसीएल और तीसरे पक्ष के पुस्तकालय, यहां तक कि केवल ऑब्जेक्ट प्रारूप में प्रदान किए गए हैं।
हालात की सावधान रहना होगा:
- inlined दिनचर्या; रेखांकित दिनचर्या का शरीर प्रतीक संस्करण
- जेनिक्स का हिस्सा है; सामान्य प्रकार के और तरीकों के कार्यान्वयन की ओर संबंधित प्रतीक संस्करणों
तो हम कार्यान्वयन अनुभाग के लिए bugfixes सीमित करने के लिए दर्द (जैसे नए पटाखा कक्षाएं शुरू करने के बजाय सार्वजनिक रूप से विधि अधिभावी ले लिया का हिस्सा हैं कक्षा का सामना करना)।
और फिर
तब मैं Vcl.Themes.pas
में एक ठीक करने के लिए चला गया। मैं साधारण शुरू, फ़ाइल कॉपी करने और सुधारों फ़ोल्डर में रखने से:
| VCL Source Fixes
|----- Vcl.ComCtrls.pas
|----- Winapi.CommCtrl.pas
|----- Vcl.Themes.pas
हालांकि मैं नहीं (अभी तक) भी Vcl.Themes.pas
संशोधित किया है, संकलक यह पर chokes:
[घातक त्रुटि dcc32 ] Vcl.Themes.pas (2074): F2051 यूनिट Vcl.Forms Vcl.Themes के एक अलग संस्करण के साथ संकलित किया गया था।TMouseTrackControlStyleHook
क्यों
महत्वपूर्ण सवाल यह है:
हो रहा क्यों है?
क्या चल रहा है कि संकलक यह महसूस करने में असमर्थ है कि सटीक एक ही फ़ाइल एक ही फ़ाइल है? क्या यह संभव है कि वीईएल स्रोत एक्सई 6 के साथ भेज दिया गया है, और डीसीयू में जहाजों से मेल नहीं खाता है? क्या पुस्तकालय खोज आदेश के साथ इसका कुछ संबंध है? क्या इसमें इनलाइनिंग, जेनेरिक, इटरेटर्स, प्लेटफॉर्म, डीबग डीसीयूएस, 64-बिट कंपाइलर, ifdefs, कोड समापन, सिनेर्जी, बॉक्स के बाहर कुछ करने के लिए कुछ है?
अन्य, निहित, सवाल है कि जवाब देने के लिए कोशिश कर रहा है के साथ जाने हैं क्यों:
यह दो अन्य फ़ाइलों के लिए क्यों काम करता है, लेकिन इस एक?
जब मैं फ़ाइल को भी नहीं बदलता तो यह विफल क्यों होता है?
आपने क्या प्रयास किया है?
VCL Source Fixes
उच्च और खोज पथ- dcus
- पर उपयोग डिबग मोड़ की कोशिश की में कम चलती की कोशिश की 64-बिट मंच का उपयोग करने जा
- अपने प्रोजेक्ट के फ़ोल्डर में सभी
dcu
फ़ाइलों को हटाने की कोशिश की (करने की कोशिश की हालांकिD:\Programs\Embarcadero\Studio\14.0\lib\win32\release\Vcl.Themes.dcu
को हटा नहीं रहा है जो डेल्फी XE6 के साथ जहाजों) - XE6 को बंद करना और इसे फिर से चलाना
- जा रहा है लंच के लिए वेंडी के लिए
बेशक मैं इसे ठीक करना चाहता हूं। लेकिन इसे ठीक करने की इच्छा से अधिक मैं समझना चाहता हूं कि यह क्यों विफल रहा है। कंपाइलर जादू, वूडू, या क्यू-जैसी शक्तियों को नियोजित नहीं कर रहा है। यह एक निर्धारक मशीन है, और एक निश्चित सेट (अनियंत्रित) नियमों के अनुसार काम कर रही है।
ऐसा क्यों हो रहा है?
भी
- Delphi - Unit x was compiled with a different version of x, when fixing a VCL bug
- Can I modify a constant in the RTL class System.Classes.TStream and rebuild it at runtime in Delphi XE6?
ठीक है, जो हम दोनों को दोपहर के भोजन के लिए वेंडी के पास जाता है :-) –
देखें [डेल्फी - यूनिट एक्स को वीसीएल बग फिक्स करते समय एक्स के एक अलग संस्करण के साथ संकलित किया गया था] (http://stackoverflow.com/ क्यू/2441229 9/57671 9) और [क्या मैं आरटीएल क्लास सिस्टम में स्थिरता संशोधित कर सकता हूं। क्लास.एसटी स्ट्रीम और इसे डेल्फी एक्सई 6 में रनटाइम पर पुनर्निर्माण कर सकते हैं?] (http://stackoverflow.com/q/24145214/576719)। @ डेविडहेफरन जवाब देखें। वूडू यह है। –
क्षमा करें इयान लेकिन आप भाग्य से बाहर हैं। आपको एक चक्कर लगाने की आवश्यकता होगी। मैंने मार्को को मनाने की कोशिश की कि यह टूट गया था लेकिन वह मुझ पर विश्वास नहीं करता है। http://blog.marcocantu.com/blog/2014_august_buffer_overflow_bitmap.html मार्को का मतलब देव संबंध लड़का होना है, इसलिए भगवान हमारी मदद करेंगे जब वह हमें नहीं सुनेंगे –