2013-07-15 2 views
5

डेल्फी में सशर्त परिभाषा 255 वर्णों तक सीमित है। इसका मतलब है कि यदि आपके पास परिभाषित 255 से अधिक वर्ण हैं, तो उन्हें अनदेखा कर दिया जाता है। जैसेसशर्त परिभाषाओं पर 255 वर्ण सीमा को कैसे दूर किया जाए?

enter image description here

तो सशर्त परिभाषित करता है के सेट:

Win32API;AlarmServerEngineVersion27;ImNotUsingOlderSimpleThread;EnableJclExceptionTracking;SaveExceptionsToDatabase;ShowExceptionForm;SNAPIN_NEEDS_NODE_DESCRIPTOR;VIRTUAL_TREES_MOUSE_DOWN_FOCUS_LAST;UseSQLServerLocking;SnapInFactoryFormClassIsOptional;Strict;SIFFCIO;Sqm 

पिछले 3 परिभाषित करता है अनदेखी कर रहे हैं।

मुझे जो चाहिए वह परियोजना में सशर्त परिभाषा को परिभाषित करने का एक तरीका है, जबकि 255 वर्णों तक सीमित नहीं है।

मैंने सोचा शायद परियोजना स्रोत फ़ाइल को सशर्त परिभाषित करता चलती है, शायद के माध्यम से शामिल में फ़ाइल में शामिल हैं:

program ConsotoManager; 

{$R *.RES} 
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'} 
{$DEFINE Win32API} 
... 
{$DEFINE Sqm} 
{$DEFINE Strict} 

uses 
    FastMM4, 
    Windows, 
    SysUtils, 

दुर्भाग्य से यह does not 'काम करते हैं। कारण यह काम नहीं करता है कि आप सशर्त परिभाषाओं के लिए परिभाषित नहीं कर सकते हैं; फ़ाइल के अंत तक केवल अंतिम परिभाषित करता है।

तो, मैं पर 255 वर्ण सीमा को कैसे हटा सकता हूं सशर्त डेल्फी में परिभाषित करता है?


समस्या, ज़ाहिर है, कैसे परियोजना स्तर, को परिभाषित करता है, जबकि साझा स्रोत कोड फ़ाइलों (साझा फ़ाइलों परियोजना फ़ोल्डर के बाहर, अपने स्वयं निर्देशिका में हैं) है है।

उत्तर

0

मेरा डेल्फी थोड़ा जंगली है, लेकिन मेरा मानना ​​है कि आप एक परिभाषा बना सकते हैं जो उन सभी का प्रतिनिधित्व करता है, जिन्हें आप भी परिभाषित करते हैं, इसलिए आपको केवल एक शर्त की जांच करनी होगी।

{$IF Defined(Win32API) 
    AND Defined(AlarmServerEngineVersion27) 
    AND Defined(ImNotUsingOlderSimpleThread) 
    AND Defined(EnableJclExceptionTracking) 
    AND Defined(SaveExceptionsToDatabase) 
    AND Defined(ShowExceptionForm) 
    AND Defined(SNAPIN_NEEDS_NODE_DESCRIPTOR) 
    AND Defined(VIRTUAL_TREES_MOUSE_DOWN_FOCUS_LAST) 
    AND Defined(UseSQLServerLocking) 
    AND Defined(SnapInFactoryFormClassIsOptional) 
    AND Defined(Strict) 
    AND Defined(SIFFCIO) 
    AND Defined(Sqm) 
} 
{$DEFINE I_AM_TOTALLY_READY} 
{$IFEND} 
9

आपने लगभग प्रोजेक्ट फाइल में परिभाषा के साथ कर रहे हैं, लेकिन याद रखें कि डेल्फी सी नहीं है - संकलक, हर बार यह कुछ भी संकलित क्रम में प्रत्येक उल्लेख इकाई नहीं पढ़ता है जैसे कि सब फ़ाइलों को पाठ रूप से चिपकाया गया था, इसलिए प्रोजेक्ट फ़ाइल में परिभाषित चीजें उस फ़ाइल के बाहर दिखाई नहीं देगी। में है कि यह नाम दिया include कि करता कारण यह करने के लिए फिर से पढ़ें हर संकलन पर उल्लेख किया फ़ाइल एक निर्देश का समर्थन करता है

हालांकि, डेल्फी सी की तरह है। चलिए इसका इस्तेमाल करते हैं।

सबसे पहले, अपनी सभी परिभाषाओं को एक अलग पाठ फ़ाइल में रखें। आइए इसे Defines.inc पर कॉल करें।

{$DEFINE Win32API} 
... 
{$DEFINE Sqm} 
{$DEFINE Strict} 

तब स्रोत फ़ाइलें उन परिभाषाओं में से किसी की जरूरत है कि सभी में उस फ़ाइल शामिल हैं।

program ConsotoManager; 

{$R *.RES} 
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'} 
{$INCLUDE Defines.inc} 

uses 
    FastMM4, 
    Windows, 

अब आप अपने प्रोजेक्ट विकल्पों में सूची को साफ़ कर सकते हैं और इसके बजाय आपको उस फ़ाइल में जो भी परिभाषा चाहिए उसे जोड़ सकते हैं। जब आप उस फ़ाइल को बदलते हैं, तो परिवर्तनों को प्रभावी होने के लिए आपको एक पूर्ण निर्माण (एक साधारण संकलन के बजाय) करने की आवश्यकता हो सकती है।

इसके अलावा, कि क्या आप वास्तव में इतने सारे संकलन चर की जरूरत पर विचार करें। हो सकता है कि उनमें से कुछ हमेशा परिभाषित कर रहे हैं, तो यह समझ बनाने के लिए उन्हें संकलन समय में जांच करने के लिए नहीं है। शायद उनमें से कुछ अनावश्यक हैं।

+1

U + 2014 +1: एम डैश! –

+1

समस्या फ़ाइलें साझा की गई हैं। उनके पास 15 साल की नई विशेषताएं हैं, और पिछली संगतता, जिन्हें प्रति-प्रोजेक्ट में चुना गया है या बाहर किया गया है। तो मैं '' VirtualTrees.pas' के शीर्ष करने के लिए जोड़ {$ Defines.inc शामिल} ', यह काम नहीं करेगा क्योंकि यह' खोजने के लिए Defines.inc' (के बाद से 'Defines.inc' बैठा है में सक्षम नहीं होगा मेरे प्रोजेक्ट के स्रोत फ़ोल्डर में। और अगर यह काम करता है, तो भी मैं लाइब्रेरी में एक ब्रेकिंग चेंज पेश करता हूं, क्योंकि अन्य परियोजनाओं में से कोई भी 'Defines.inc' फ़ाइल नहीं रखेगा। –

+0

मैंने' सख्त 'को परिभाषित करना शुरू कर दिया है अन्य परिभाषित करता है सक्षम बनाते हैं। तो तुम 'Strict' जो अन्य परिभाषित करता है के कुछ सक्षम हो जाएगा परिभाषित कर सकते हैं,। मैं भी inuost' परिभाषित' ImNotUsingOlderSimpleThread', एक तरह से कीमती पात्रों को बचाने के लिए के रूप में सक्षम परिभाषित 'बनाया है। क्या मैं एक की जरूरत है प्रोजेक्ट में * "सशर्त परिभाषा" डालने के लिए रखें * जो सभी संकलित इकाइयों पर काम करता है, न केवल उस इकाई के अंत तक जब तक परिभाषित किया जाता है। –

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