2013-04-03 7 views
7

मेरे पास एक समाधान है जिसमें सी ++ डीएलएल प्रोजेक्ट है, और एक सी # प्रोजेक्ट जो इस डीएलएल का उपयोग करेगा (PInvoke का उपयोग करके)।विजुअल स्टूडियो 2010 में डीएल का सही ढंग से संदर्भ कैसे लें?

डीएलएल को मेरे समाधान फ़ोल्डर में x64/Release फ़ोल्डर में बनाया जा रहा है, जो समझ में आता है, क्योंकि इस तरह से सी # परियोजना को डीएलएल प्रोजेक्ट के फ़ोल्डर्स में पोक नहीं करना पड़ता है।

मुझे आश्चर्य है कि अब इसका संदर्भ देने का सही तरीका क्या होगा। अभी, डीएलएल परियोजना सी # परियोजना की निर्भरता है। मेरी अंतर्ज्ञान ने मुझे बताया कि यह पर्याप्त होना चाहिए था, लेकिन सी # प्रोजेक्ट का कहना है कि यह डीएलएल नहीं ढूंढ सकता है।

क्या मुझे सिर्फ .dll फ़ाइल को संदर्भ के रूप में भी जोड़ना चाहिए? मैंने सोचा कि यह अब काम कर सकता है लेकिन लंबे समय तक चीजें तोड़ सकता है जब परियोजना सेटिंग्स बदल सकती है।

+0

क्या सी ++ डीएलएल प्रबंधित कोड है? – WhozCraig

+0

@WozCraig: वह कहता है कि वह पी/Invoke का उपयोग कर रहा है - यह तब अप्रबंधित होना चाहिए। –

+0

हाँ, मैंने अभी देखा है। ओह। मुझे वास्तव में कुछ नींद लेने की जरूरत है। – WhozCraig

उत्तर

1

आमतौर पर ऐसी परिस्थितियों में मैं अपना समाधान कॉन्फ़िगर करता हूं कि सभी परियोजनाएं $(SolutionDir)bin\$(Configuration) पर संकलित हों। बाइनरी तब उसी तरह स्थित होते हैं जैसे उत्पादन मोड और डीएलएल का आसानी से उपयोग किया जा सकता है।

डीएलएल के नवीनतम संस्करण को रखने के लिए, याद रखें कि आप एक निर्भरता निर्धारित कर सकते हैं, जैसे कि यदि डीएलएल में कुछ भी बदलता है, तो इसे आपके असेंबली/एप्लिकेशन के निर्माण से पहले पुनर्निर्मित किया जाएगा।

फिर भी एक और तरीका अपने डीएलएल को उपयुक्त फ़ोल्डर में कॉपी करने के लिए बिल्ड इवेंट (प्रीबिल्ड और पोस्टबिल्ड) का उपयोग करना है।

1

आप एक प्रबंधित परियोजना में संदर्भ के रूप में एक अप्रबंधित DLL नहीं जोड़ सकते हैं। डीएलएल को या तो निष्पादन योग्य फ़ोल्डर में या सिस्टम के पथ के किसी भी अन्य फ़ोल्डर में रहने की जरूरत है।

वीएसएल को उस फ़ोल्डर में कॉपी करने के लिए "पोस्ट बिल्ड इवेंट" का उपयोग करने का सबसे अच्छा तरीका है जहां इसे हर बार पुनर्निर्मित किया जाता है।

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