2014-08-28 8 views
10

के एक अलग संस्करण के साथ संकलित किया गया था हम डेल्फी XE6 में वीसीएल में बग फिक्स कर रहे हैं। अब तक फ़ोल्डर में शामिल हैं:F2051: यूनिट% s को% s

| VCL Source Fixes 
|----- Vcl.ComCtrls.pas 
|----- Winapi.CommCtrl.pas 

और हम अपने लाइब्रेरी खोज पथ के लिए फ़ोल्डर जोड़ने:

enter image description here

साथ ही हमें पता चला कि हम करने के लिए हमारे फिक्स सीमित करने के लिए है कि 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 को बंद करना और इसे फिर से चलाना
  • जा रहा है लंच के लिए वेंडी के लिए

बेशक मैं इसे ठीक करना चाहता हूं। लेकिन इसे ठीक करने की इच्छा से अधिक मैं समझना चाहता हूं कि यह क्यों विफल रहा है। कंपाइलर जादू, वूडू, या क्यू-जैसी शक्तियों को नियोजित नहीं कर रहा है। यह एक निर्धारक मशीन है, और एक निश्चित सेट (अनियंत्रित) नियमों के अनुसार काम कर रही है।

ऐसा क्यों हो रहा है?

भी

+1

ठीक है, जो हम दोनों को दोपहर के भोजन के लिए वेंडी के पास जाता है :-) –

+0

देखें [डेल्फी - यूनिट एक्स को वीसीएल बग फिक्स करते समय एक्स के एक अलग संस्करण के साथ संकलित किया गया था] (http://stackoverflow.com/ क्यू/2441229 9/57671 9) और [क्या मैं आरटीएल क्लास सिस्टम में स्थिरता संशोधित कर सकता हूं। क्लास.एसटी स्ट्रीम और इसे डेल्फी एक्सई 6 में रनटाइम पर पुनर्निर्माण कर सकते हैं?] (http://stackoverflow.com/q/24145214/576719)। @ डेविडहेफरन जवाब देखें। वूडू यह है। –

+1

क्षमा करें इयान लेकिन आप भाग्य से बाहर हैं। आपको एक चक्कर लगाने की आवश्यकता होगी। मैंने मार्को को मनाने की कोशिश की कि यह टूट गया था लेकिन वह मुझ पर विश्वास नहीं करता है। http://blog.marcocantu.com/blog/2014_august_buffer_overflow_bitmap.html मार्को का मतलब देव संबंध लड़का होना है, इसलिए भगवान हमारी मदद करेंगे जब वह हमें नहीं सुनेंगे –

उत्तर

7

देखें आप का इस्तेमाल किया जब इकाई Embarcadero द्वारा संकलित किया गया उन मैच के लिए संकलक विकल्प की जरूरत है। यही कारण है कि आपका कार्यान्वयन अनुभाग केवल तभी विफल होता है जब ऐसा लगता है कि इसे सफल होना चाहिए।

एक डिफ़ॉल्ट परियोजना शुरू और CTRL का उपयोग + हे + हे इन विकल्पों में उत्पन्न करने के लिए

।मुझे

{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1} 

जब मैं XE6 में ऐसा करता हूं।

इकाई की अपनी प्रति के शीर्ष पर रखें और आपको जाने के लिए अच्छा होना चाहिए। आप अपने होस्ट प्रोजेक्ट विकल्पों के आधार पर, इनमें से एक कट-डाउन सबसेट से दूर हो सकते हैं। मेरे कोड में मुझे लगता है कि:

{$R-,T-,H+,X+} 

पर्याप्तताएं।

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