2010-08-12 9 views
8

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

उद्घाटन सॉकेट दृष्टिकोण सीधे आगे है।

डीएलएल दृष्टिकोण मेरे पास कुछ प्रश्न हैं? मैं बी में प्लग-इन डीएल लोड कर सकता हूं। मैं एक डीएलएल बनाना चाहता हूं जिसे ए बी को डेटा पास करने के लिए उपयोग किया जा सकता है। डीएलएस लोड करते समय, डीएलएल लोड करने का केवल एक उदाहरण है? यदि हां, तो क्या इसका मतलब यह है कि डेटा को डीएलएल लोड करने वाले अनुप्रयोगों के बीच साझा किया जा सकता है?

बेहतर विकल्प क्या है?

क्या ऐसा करने के अन्य तरीके हैं?

उत्तर

13

आप डीएलएल के माध्यम से डेटा प्रभावी ढंग से साझा नहीं कर सकते हैं। अन्य तरीके:

  • डिस्क फाइल
  • पाइप
  • साझा स्मृति
  • संदेशों
  • आरपीसी
  • CORBA
  • कॉम
  • आदि
+0

डीएल के माध्यम से डेटा साझा करने का मुद्दा क्या है? – zooropa

+2

@zoo नियंत्रण करना बहुत मुश्किल है, अगर डीएलएल अनलोड हो जाता है तो काम नहीं करता है, और डीएलएल के विशेष संकलन की आवश्यकता होती है - डीएलएल में डेटा डिफ़ॉल्ट रूप से साझा नहीं किया जाता है। –

+1

dlls –

0

आपके पास एक साझा कैश हो सकता है (उदाहरण के लिए एक विंडोज सेवा या छिपी प्रक्रिया) जो सुन सकता है - सभी ग्राहकों को डेटा लौटा रहा है। यह एक पर्यवेक्षक पैटर्न दृष्टिकोण का उपयोग कर।

5

सरलतम विधि (विंडोज संभालने के बाद से आप एक DLL उल्लेख) सरलीकृत प्रपत्र यहाँ में वर्णित है, CreateProcess का उपयोग करें और बच्चे की प्रक्रिया के लिए एक पाइप खोलने के लिए शायद है: http://msdn.microsoft.com/en-us/library/ms682499.aspx

नाम पाइप्स एक विकल्प हो सकता है, खासकर यदि आप सभी प्रक्रियाओं के जीवनकाल के नियंत्रण में नहीं हैं। http://msdn.microsoft.com/en-us/library/aa365590.aspx

साधारण मामलों के लिए, मेलस्लॉट पर्याप्त विकल्प हो सकता है।

http://msdn.microsoft.com/en-us/library/aa365574.aspx#base.using_a_mailslot_for_ipc

यहाँ विंडोज के लिए विभिन्न Interprocess संचार तकनीक की एक लंबी सूची है। http://msdn.microsoft.com/en-us/library/aa365574.aspx

स्थानीय रूप से कुछ होने के लिए, सॉकेट का उपयोग करने से ओवरकिल लगता है। इसके अलावा आपको अन्य आईपीसी तरीकों के एकीकृत सुरक्षा तंत्र के आधार पर स्पूफिंग हमलों को रोकने के लिए अपनी सुरक्षा तंत्र को लागू करना होगा।

+0

के बीच डेटा साझा करने के बारे में अधिक जानकारी के लिए #pragma data_seg में देखें क्या आप जानते हैं कि आपने पुराने लिंक पोस्ट किए हैं? –

+0

नहीं, जब वे पोस्ट करते हैं तो वे सभी नए Google प्रश्नों से आए ... आह, मैं देखता हूं कि वीएस संस्करण उन में निर्दिष्ट है। मुझे नहीं लगता कि सामग्री बदल गई है। – JasonTrue

1

वैकल्पिक संभव समाधानों का पता लगाने के लिए हमेशा अच्छा होता है, लेकिन मैं व्यक्तिगत रूप से मानता हूं कि अनुप्रयोगों के बीच डेटा के लिए एक परिवहन परत के रूप में सॉकेट का उपयोग न केवल भविष्य का सबूत है, बल्कि स्केलेबल भी है। सॉकेट का उपयोग करने से आप ओएस विशिष्ट कोड की भारी मात्रा में लिखने की आवश्यकता को खत्म कर देंगे, जो आपको भविष्य में गैर-विंडोज ऑपरेटिंग सिस्टम में अपने एप्लिकेशन को पोर्ट करने से रोक सकता है।

मैं सॉकेट का सुझाव दूंगा।

+1

हालांकि, यह आवश्यक है कि आप ओएस-तटस्थ कोड की अत्यधिक मात्रा लिखें, और फिर इसे बनाए रखें। –

+0

हां। मुद्दा लेना :) – carribus

0

मैं Juan Zamora M के साथ कुछ हद तक सहमत होगा सिवाय इसके कि डेटा प्रदान करने वाली सेवा में एक एपीआई होनी चाहिए जिसे श्रोताओं के माध्यम से बदला जाने पर धक्का देने की आवश्यकता हो।

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