2010-06-02 10 views
6

मेरे पास दो अलग-अलग सी # अनुप्रयोग हैं जो एक ही समय में चल रहे हैं।क्या एक ही डीएलएल डेटा 2 अलग-अलग प्रक्रियाओं द्वारा साझा किया जा सकता है?

मैं चाहता हूं कि वे दोनों एक डीएलएल (सी # में भी) के "उदाहरण" तक पहुंचने में सक्षम हों।

डीएलएल में कुछ डेटा है जो मैं दो अनुप्रयोगों में से किसी भी के लिए पूछना चाहता हूं।

मेरा डीएलएल थ्रेड-सुरक्षित है इसलिए मुझे उम्मीद थी कि यह संभव होगा लेकिन मुझे यकीन नहीं है कि कैसे।

कोई भी मदद या सलाह की सराहना की जाएगी।

+2

एक डीएलएल को केवल रैखिक डेटा और कोड का संग्रह रखा जाता है, यानी "ऑब्जेक्ट्स" जैसे संरचित नहीं होते हैं। एक डीएलएल एक उदाहरण कैसे हो सकता है? यदि आपका मतलब कोड और डेटा साझा करना है; यह ओएस निर्भर है। – Pindatjuh

उत्तर

5

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

यदि आप दो प्रक्रियाओं के बीच डीएलएल में उपयोग की जाने वाली जानकारी साझा करना चाहते हैं, तो ऐसा लगता है कि किसी प्रकार के आईपीसी (इंटरप्रोसेस संचार) तंत्र जैसे सॉकेट, साझा मेमोरी, पाइप का उपयोग करना आवश्यक होगा , आदि

+0

तो आपका मतलब है कि दोनों लोड किए गए डीएलएल एक दूसरे से बात करेंगे, नामित पाइप कहेंगे? –

+0

@ जेली अम्मा: यदि आप इसे लागू करते हैं तो वे पाइप के माध्यम से एक-दूसरे से बात कर सकते हैं। यह स्वचालित नहीं है अगर आप यही पूछ रहे हैं। –

0

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

यदि आप दोनों अनुप्रयोगों के लिए एक ही असेंबली को तैनात करने से बचना चाहते हैं तो आप put it in the GAC कर सकते हैं।

0

यह संभव है। आप दोनों अनुप्रयोगों के लिए आसान पहुंच प्राप्त करने के लिए जीएसी में डीएलएल स्थापित कर सकते हैं (मजबूत नामित असेंबली की आवश्यकता है)।

या इसे किसी फ़ोल्डर में चिपकाएं और दोनों ऐप्स उस फ़ोल्डर को डीएल के लिए खोज लें।

MSDN support article

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> 
      <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
0

मैं इस सी # में लेकिन सी में किया जा सकता है, तो आप भी ++ साझा मेमोरी वर्गों उपयोग कर सकते हैं साझा करने के लिए जानकारी भी जटिल नहीं है पता नहीं है। आप बस एक म्युटेक्स

विषय पर एक अच्छा लेख उदाहरण के लिए उपयोग करते हुए इस ressource के लिए उपयोग सिंक्रनाइज़ करने के लिए की आवश्यकता होगी: http://www.codeproject.com/KB/threads/SharedMemory_IPC_Threads.aspx

है मज़ा

0

अपने DLL स्मृति में या डिस्क पर नामित MemoryMappedFile (बनाता है) तो दो अनुप्रयोग DLL द्वारा बनाई गई स्मृति साझा कर सकते हैं। प्रत्येक एप्लिकेशन में साझा मेमोरी के लिए एक अलग सूचक होगा लेकिन स्मृति वास्तव में साझा की जाएगी। आपको साझा स्मृति के लिए एक ही नाम का उपयोग करना होगा और प्रक्रियाओं के बीच थ्रेड सुरक्षित होने के नाते आप अपने आप पर हैं। (नामांकित सेमफोर या म्यूटेक्स काम करेंगे, क्रिटिकलसेक्शन नहीं होगा।)

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

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