2012-10-28 8 views
7

मैं अगर परियोजना एक पुस्तकालय है या नहीं पता करने के लिए, के बाद मदद के मैं इस कोड लिखा है कि काम नहीं करता है पढ़ा कोशिश कर रहा हूँ:मैं संकलन समय पर कैसे कह सकता हूं कि परियोजना एक प्रोग्राम या पुस्तकालय है या नहीं?

{$IF DEFINED(LIBPREFIX)} 
    {$DEFINE PROJECT_IS_EXECUTABLE} 
    {$UNDEF PROJECT_IS_LIBRARY} 
{$ELSE} 
    {$DEFINE PROJECT_IS_EXECUTABLE} 
    {$UNDEF PROJECT_IS_LIBRARY} 
{$IFEND} 

मैं परिभाषित की कोशिश की, की घोषणा की और

{$IF (LIBPREFIX = '')} 

प्रत्येक प्रयास हमेशा डीएलएल और कार्यक्रमों के लिए समान होता है। मैं केवल अंतर्निर्मित संकलक निर्देशों का उपयोग करके यह कैसे कर सकता हूं?

संपादित

मेरे इरादा "पीई फ़ाइल" से अतिरिक्त जानकारी निकालने के लिए है।

मैं इसे सीधे .dpr प्रोजेक्ट फ़ाइल में करता हूं, इसलिए कोई फर्क नहीं पड़ता कि अन्य इकाइयां कैसे संकलित की गईं, लेकिन मैं डीएलएल परियोजनाओं में ऐसा नहीं कर सकता।

इसलिए मैं इसे डीएलएल परियोजनाओं में अवरुद्ध करने का एक तरीका ढूंढ रहा था।

यह मैं कैसे इस समस्या को हल है, मैं अपने .dpr कार्यक्रमों को यह निर्देश जोड़ें:

{$DEFINE STRIPE_PE_INFO} 
    {$DEFINE STRIPE_RTTI} 
    {$I DDC_STRIP.inc} 

और DDC_STRIP.inc सभी तर्क है।

उत्तर

11

आपकी फ़ाइल संकलित होने पर यह जानने का कोई तरीका नहीं है। एक स्रोत फ़ाइल को .dcu में संकलित किया जा सकता है और उसके बाद किसी भी प्रकार की प्रोजेक्ट में लिंक किया जा सकता है। एक अच्छा उदाहरण आरटीएल और वीसीएल इकाइयां हैं।

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

+0

यह सच है, यह समझ में आता है। –

1

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

6

आप इसे संकलित समय पर निर्धारित नहीं कर सकते हैं, लेकिन रनटाइम पर, आप यह निर्धारित करने के लिए SysInit.ModuleIsLib (डेल्फी 2007) देख सकते हैं कि कोड लाइब्रेरी (या पैकेज) में चल रहा है या नहीं।

+0

शुद्धता के समान, 'System.IsLibrary' वह है जिसे आपको रनटाइम पर डीएलएल का पता लगाने की आवश्यकता होती है। लेकिन सवाल ने विशेष रूप से संकलन समय के बारे में पूछा कि किस मामले में इनमें से कोई भी चर उचित नहीं है। –

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

  • कोई संबंधित समस्या नहीं^_^