2008-09-12 19 views

उत्तर

35
  • __declspec(dllexport) लिंकर कि आप चाहते हैं इस वस्तु अन्य DLL का आयात करने के लिए के लिए उपलब्ध कराया जाना बताता है। इसका उपयोग तब किया जाता है जब एक डीएलएल बनाते हैं जो अन्य लिंक कर सकते हैं।

  • __declspec(dllimport) एक डीएलएल से कार्यान्वयन आयात करता है ताकि आपका एप्लिकेशन इसका उपयोग कर सके।

मैं केवल एक नौसिखिया C/C++ डेवलपर हूँ, इसलिए शायद किसी की आई

7

दो अलग अलग उपयोग के मामलों की तुलना में बेहतर स्पष्टीकरण मिल गया:

1) आप के भीतर एक वर्ग कार्यान्वयन को परिभाषित कर रहे हैं एक डीएलएल आप कक्षा का उपयोग करने के लिए एक और कार्यक्रम चाहते हैं। यहां आप ड्लेक्सपोर्ट का उपयोग करते हैं क्योंकि आप एक कक्षा बना रहे हैं जिसे आप डीएलएल को बेनकाब करना चाहते हैं।

2) आप एक डीएल द्वारा प्रदान किए गए एक फ़ंक्शन का उपयोग कर रहे हैं। आप डीएलएल के साथ प्रदान किए गए हेडर को शामिल करते हैं। यहां शीर्षलेख वर्तमान प्रोग्राम द्वारा उपयोग किए जाने वाले कार्यान्वयन को लाने के लिए dllimport का उपयोग करता है।

अक्सर एक ही हेडर फ़ाइल दोनों मामलों और मैक्रो परिभाषित में उपयोग की जाती है। बिल्ड कॉन्फ़िगरेशन मैक्रो को आयात या निर्यात करने के लिए परिभाषित करता है जिसकी आवश्यकता होती है।

8

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

डिलिमपोर्ट विपरीत है: यह एक डीएलएल से आयात किए जाने वाले कार्यों को चिह्नित करता है। इस मामले में आप केवल फ़ंक्शन के हस्ताक्षर की घोषणा करते हैं और लाइब्रेरी के साथ अपना कोड लिंक करते हैं।

62

__declspec(dllexport) - इस तरह के टैग या फ़ंक्शन को डीएलएल से निर्यात किया जाएगा, जिसे बनाया गया है। यदि आप एक डीएलएल बना रहे हैं और आप एक एपीआई चाहते हैं, तो आपको इसे या एक अलग .DEF फ़ाइल का उपयोग करना होगा निर्यात को परिभाषित करता है (MSDN)। यह आसान है क्योंकि यह परिभाषा को एक ही स्थान पर रखता है, लेकिन .DEF फ़ाइल अधिक विकल्प प्रदान करती है।

__declspec(dllimport) - टैग की गई कक्षा या फ़ंक्शन को डीएलएल से आयात किया जाएगा। यह वास्तव में आवश्यक नहीं है - लिंकर को खुश करने के लिए आपको एक आयात लाइब्रेरी वैसे भी की आवश्यकता है। लेकिन जब dllimport के साथ ठीक से चिह्नित किया गया है, तो संकलक और लिंकर के पास कॉल को अनुकूलित करने के लिए पर्याप्त जानकारी है; इसके बिना, आप आयात पुस्तकालय में एक स्टब फ़ंक्शन से सामान्य स्थिर लिंकिंग प्राप्त करते हैं, जो अनावश्यक संकेत जोड़ता है। ONT1ONT2

+6

'dllimport' का उपयोग न करने के परिणामों के बारे में बहुत अच्छी जानकारी। – alecov