मेरे पास एक फॉर्म में आरटीएल स्ट्रीमिंग में एक रनटाइम त्रुटि हो रही है, जिससे TReader.ReadRootComponent करते समय अपवाद EClassNotFound उठाया जा सकता है। विशेष त्रुटि संदेश "क्लास TActionList नहीं मिला" है।रनटाइम पर उठाए गए EClassNotFound का वास्तव में क्या मतलब है जब प्रश्न में कक्षा संकलित और लिंक समय पर है, और स्पष्ट रूप से कोड में है?
क्या अजीब है:
- मेरा मुख्य रूप क्रिया सूची का उपयोग करता है।
- मज़े के लिए, मैंने इसे ठीक करने का प्रयास करने के लिए, मेरे प्रोजेक्ट में ActnList.pas (वीसीएल स्रोत फ़ोल्डर से) जोड़ा।
यह कुछ ऐसा होता है जब मैं कुछ मिनट पहले काम कर रहा था। मैंने जो परिवर्तन किया है वह कुछ उप-फ्रेम कोड में था: मैंने अपने सभी कार्यान्वयन अनुभाग कोड को ifdef मार्कर के साथ हटा दिया, क्योंकि मैं इकाई परीक्षण और प्रोटोटाइप के लिए कुछ फ्रेमों का मज़ाक उड़ा रहा हूं।
मैंने प्रोजेक्ट में एक्शन लिस्ट क्लास जोड़ने की कोशिश की, और मैंने विभिन्न कंपाइलर और लिंक विकल्पों के साथ और बिना कोशिश की, और फिर भी, मुझे अभी भी यह अपवाद मिलता है। जाहिर है कुछ अजीब है। इस समस्या को पाने के लिए एक और अजीब तरीका होना चाहिए।
वास्तव में, ऐसा लगता है कि वास्तव में कुछ अजीब चल रहा है। जब इस त्रुटि उठाया है, मैं निम्नलिखित कॉल स्टैक मिलती है:
rtl.Classes.ClassNotFound('TActionList')
rtl.Classes.TReader.FindComponentClass(???)
rtl.Classes.FindExistingComponent
rtl.Classes.TReader.ReadComponent(nil) /// NIL!? WHAT!!!!!
rtl.Classes.TReader.ReadDataInner(???)
rtl.Classes.TReader.ReadData(???)
rtl.Classes.TComponent.ReadState(???)
vcl.Controls.TControl.ReadState(???)
vcl.Controls.TWinControl.ReadState($60B9CF0)
vcl.Forms.TCustomForm.ReadState(???)
rtl.Classes.TReader.ReadRootComponent($606EB90)
rtl.Classes.TStream.ReadComponent($606EB90)
rtl.Classes.InternalReadComponentRes(???,???,$606EB90)
rtl.Classes.InitComponent(TComplexFormContainingFrames)
ऐसा लगता नहीं के बराबर जानबूझकर है, TReader.ReadDataInner में (उदाहरण: TComponent):
while not EndOfList do ReadComponent(nil);
अद्यतन: मेरा मानना है कि इस सवाल का जवाब "सीरियलाइजेशन संदर्भ" को समझना है क्योंकि मेसन ने उल्लेख किया है। और, अब मेरी अपनी मूर्खता स्वीकार करने का समय है: मैंने परियोजना से फ्रेम के माता-पिता को हटा दिया, यह समझ में नहीं आया कि यह फ्रेम का मूल था। मैंने TMyFrameParent
के लिए TMyFrameParent = class(TFrame)
के रूप में प्रकार की घोषणा को दबाकर गुम होने के दौरान काम किया, और इससे बदले में स्थिति की स्थिति बढ़ गई। मैं यहां सवाल छोड़ रहा हूं क्योंकि मुझे लगता है कि यह भविष्य में वास्तव में आसान हो सकता है जब यह अपवाद आर्केन मामलों में होता है, और इसे कैसे ठीक किया जाए। विशेष रूप से, मेसन के पास "क्रमबद्ध संदर्भ" के बारे में जानकारी का एक दिलचस्प दिलचस्प हिस्सा है और वे कक्षा-नाम-खोज पर कैसे लागू होते हैं।
शून्य केवल एक मौजूदा उदाहरण में पढ़ने के बजाय एक नया उदाहरण तत्काल करने के लिए ReadComponent को सिग्नल करता है। –