2012-12-08 13 views
7

मेरे पास एक फ़ाइल में विभिन्न डेल्फी संस्करणों को संभालने के लिए विभिन्न परिभाषित विवरण हैं। इसमें एक इकाई में फ़ाइल "शामिल" है। कंपाइलर फ़ाइल में शामिल परिभाषाओं का सम्मान करता है लेकिन आईडीई नहीं। इसके परिणामस्वरूप उपयोग इकाइयों में कुछ इकाइयों को जोड़ने के परिणामस्वरूप जो पहले से ही हो सकते हैं - एक डेफिन कंपाइलर निर्देश में संलग्न है।सशर्त रूप से कुछ इकाइयों को कैसे शामिल करें

इसलिए, यदि एक यूनिट जोड़ा गया है जो पूर्व डेल्फी XE3 में उपलब्ध नहीं है तो आपको बड़ी समस्या होगी क्योंकि यदि आप आईडीई को इकाई जोड़ते हैं और इसे पूर्व डेल्फी XE3 संस्करण के साथ संकलित नहीं कर सकते हैं जो नहीं करता है उस इकाई है।

उदा। एक इकाई जिसमें एक इकाई के साथ एक TActionList है।

  1. MYINCLUDE.INC केवल एक {$DEFINE DELPHIXE3}

  2. परिभाषित एक नमूना इकाई की तरह

    unit Unit1; 
    
    {$I MYINCLUDE.INC}     
    
    uses 
        Winapi.Windows, 
        Winapi.Messages, 
        System.SysUtils, 
        System.Variants, 
        System.Classes, 
        Vcl.Graphics, 
        Vcl.Controls, 
        Vcl.Forms, 
        Vcl.Dialogs, 
        {$IFDEF DELPHIXE3} System.Actions, {$ENDIF} 
        Vcl.ActnList; 
        ... 
    
  3. लग सकता है एक के बाद बचाने आईडीई System.Actions कहते हैं का उपयोग करता है सूची के अंत में जोड़ने के जो बारी परिणामों में में एक पहचानकर्ता संकलक त्रुटि reeclared। यदि आप इसे हटाते हैं तो आईडीई इसे फिर से सहेज लेगा।

मैंने अभी रिपोर्ट की है कि QC#111178 पर।

क्या उस बग के लिए कोई कामकाज है?

ईसाई

+1

आईडीई हमेशा थोड़ा हंसमुख पार्सिंग सशर्त रहा है। मैं आपकी क्यूसी रिपोर्ट को डिज़ाइन के रूप में बंद होने की उम्मीद करता हूं। इस मुद्दे को हमेशा एक ही प्रतिक्रिया के साथ बार-बार उठाया गया है। –

+0

आईडीई हमेशा * .dpk फ़ाइलों में सशर्त उलझन में है लेकिन यह समस्या कुछ नया और निराशाजनक है। – kludg

+0

@ सर्ग यह हमेशा .pas फ़ाइलों में भी इस तरह से व्यवहार किया। यहां कुछ भी नया नहीं है। हमेशा के लिए इस तरह से किया गया था। –

उत्तर

3

शायद करने के लिए सबसे आसान काम में मदद करने के यूनिट उर्फ ​​सुविधा का उपयोग करने के लिए है। इस काम के लिए आपको विभिन्न कंपाइलर संस्करणों के लिए अलग-अलग परियोजना सेटिंग्स की आवश्यकता है। उदाहरण के लिए, प्रत्येक समर्थित कंपाइलर संस्करण के लिए अलग .dpr और .dproj फ़ाइलें।

अपने XE2 परियोजना में तुम इतनी तरह एक इकाई उर्फ ​​परिभाषित:

System.Actions=Vcl.ActnList 

XE3 परियोजना में आपको लगता है कि उर्फ ​​छोड़ देते हैं।

फिर अपनी .pas फ़ाइल में आप खुशी से सिस्टम का उपयोग कर सकते हैं। क्रियाएं डेल्फी के किसी भी संस्करण में कोई समस्या नहीं है।

System.Actions नामक खाली इकाई बनाने के लिए एक आसान समाधान है कि आप केवल XE2 बिल्ड के लिए अपनी परियोजना में शामिल हैं।

+0

हां, यह उस समस्या के लिए सबसे आसान/साफ-सुथरा कामकाज के रूप में लगता है। धन्यवाद। – Christian

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