2012-04-20 7 views
5

मैं डेल्फी में नया हूं और मैं एम्बरकेडरो आरएडी स्टूडियो 2010 में एक बहुत पुरानी डेल्फी परियोजना माइग्रेट कर रहा था। मुझे तारों का उपयोग करने में समस्या मिली। यहाँ कोड है:डेल्फी 2010 में विशाल स्ट्रिंग्स को निष्क्रिय करें

ProgramaResultadosType = record 
    Version: string; 
    TituloPrincipal : string; 
    BloquesResultados : VectorBloquesResultadosType; 
end; 

FileOfProgramaResultadosType = file of ProgramaResultadosType; 

और त्रुटि ...

"E2155 प्रकार '% s' को अंतिम रूप देने की जरूरत है - फ़ाइल प्रकार की अनुमति नहीं दी"

मैं जानता हूँ कि यह एक है जब आप स्ट्रिंग आकार निर्दिष्ट नहीं करते हैं तो कई डेल्फी डेवलपर्स के लिए जाने-माने त्रुटि।

मूल रूप से मैं आरएडी स्टूडियो के पुराने संस्करणों की तरह विशाल स्ट्रिंग निर्देश को निष्क्रिय करना चाहता हूं, लेकिन मुझे 2010 के संस्करण में पता नहीं चल रहा है।

+2

आप Embarcadero सलाह उपयोग करने की कोशिश कर रहे हैं [E2155: प्रकार '% s' को अंतिम रूप देने की जरूरत है - फ़ाइल प्रकार (डेल्फी) की अनुमति नहीं] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2 /EN/html/devcommon/cm_finit_in_file_xml.html) और इसके बजाय चार की सरणी का उपयोग करें? – RRUZ

+0

डी 2010 अब बड़ी स्ट्रिंग को "निष्क्रिय" नहीं कर सकता क्योंकि स्ट्रिंग प्रकार यूनिकोड बन गया है। यूनिकोड समर्थन गहराई से एम्बेडेड है, जिससे यह किसी भी पुराने एएनएसआई स्ट्रिंग प्रकार पर वापस नहीं जा सकता है। आपको सभी "फ़ाइल" प्रकारों को हटाना शुरू करना चाहिए। वे वास्तव में अप्रचलित हैं। –

उत्तर

10

बस के बजाय का उपयोग करें:

ProgramaResultadosType = record 
    Version: shortstring; 
    TituloPrincipal : shortstring; 
    BloquesResultados : VectorBloquesResultadosType; 
end; 

लेकिन ध्यान दें कि:

  • लगभग एक RTL समारोह के लिए हर कॉल पहले एक अदृश्य रूपांतरण नई string प्रकार के कर देगा: आप बेहतर एक और का उपयोग करना चाहिए shortstring सामग्री को पढ़ने के बाद स्पष्ट string चर;
  • डेल्फी के नए संस्करण (डेल्फी 200 से शुरू) में, string एक यूनिकोड स्ट्रिंग है: इसलिए UnicodeString से shortstring (जो एक अंसी स्ट्रिंग) में लिखते समय आप कुछ डेटा खो सकते हैं;
  • शायद ProgramaResultadosType = packed record जोड़ना आवश्यक हो सकता है यदि आपका एप्लिकेशन बहुत पुराना है (डिफ़ॉल्ट संरेखण डेल्फी 4, AFAIR के आसपास बदल गया है)।

तो तुम हो सकता है के लिए:

  • ऊपर जैसी संरचनाओं का उपयोग कर मौजूदा सामग्री पढ़ें;
  • एक नया प्रतिमान, यूनिकोड तैयार (उदाहरण के लिए मिडास, SQLite3 या किसी अन्य की तरह एक एम्बेडेड डीबी) का उपयोग लिखें।

वर्थ पढ़ने जब डेल्फी के नए यूनिकोड संस्करण के लिए एक मौजूदा अनुप्रयोग परिवर्तित:

+0

@ डेविड आप कैसे जानते हैं कि मेरे पास ढीला दांत है? संपादन के लिए धन्यवाद - मैंने हमेशा यह गलती नहीं की, इसे जानने के बिना ...:) –

+0

एक निमोनिक है: चुनें 2 "ओ" है कि आप * से * चुन सकते हैं, लेकिन हार केवल 1 है क्योंकि यदि आप * खो देते हैं * 1 केवल आपके पास 1 शेष है। –

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