2008-10-14 17 views
5

विंडोज मोबाइल पर एक सी ++ प्रोजेक्ट (यानी कोई .NET) में, मैं दो स्वतंत्र रूप से चल रहे अनुप्रयोगों के बीच आसानी से संवाद करने का एक तरीका ढूंढ रहा हूं। एप्लिकेशन ए एक सेवा चलाएगा, जबकि एप्लिकेशन बी उपयोगकर्ता को कुछ कार्यक्षमता प्रदान करेगा - जिसके लिए बी को ए के कुछ कार्यों को कॉल करना होगा। मैं COM में कुछ भी लागू करने के माध्यम से नहीं जाना होगा।विंडोज मोबाइल पर आसान आईपीसी?

असल में, मैं किसी भी प्रकार का क्रमिकरण या समान नहीं करना चाहता (यानी यह सॉकेट/पाइप/फाइलों का उपयोग करके बाहर कर देगा), बल्कि बी को सभी पैरामीटर और पॉइंटर्स को ए पर पास करना होगा, जैसे कि ए बी का हिस्सा भी, ऐप सी, डी और ई ए चलने के केवल एक उदाहरण के साथ ऐसा करने में सक्षम होना चाहिए।

मुझे यह जोड़ना चाहिए कि कभी-कभी बी को एक सरणी (या std :: vector या std :: map) को वापस करने के लिए माना जाता है जहां आकार पहले ज्ञात नहीं था।

क्या यह विंडोज मोबाइल और संभवतः अन्य प्लेटफार्मों पर संभव है?

उत्तर

14

आप प्रक्रियाओं में डेटा साझा नहीं कर सकते हैं। मैं COM की सिफारिश नहीं करता हूं। विंडोज सीई में पाइप्स मौजूद नहीं हैं। आपका सबसे अच्छा मार्ग या तो memory mapped file (डेस्कटॉप पर) या point to point message queue (डेस्कटॉप पर कुछ भी नहीं) है। जो बेहतर है आपके उपयोग परिदृश्य पर निर्भर करता है।

करो नहीं, VirtualAlloc साथ पार प्रक्रिया स्मृति का उपयोग के रूप में सुझाव के रूप में यह एक असुरक्षित हैक असुरक्षित है और CE 6.0 पर समर्थित नहीं है या बाद में तो तुम WinMo 7 और बाद के तहत तोड़ने पहुंच जाएंगे प्रयास करें।

मैं विंडोज संदेशों और WM_COPYDATA का उपयोग करने की अनुशंसा नहीं करता हूं। यह धीमी, kludgy, और त्रुटियों के लिए अत्यधिक प्रवण है।

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

+0

धन्यवाद, इस पर कुछ और पढ़ने के बाद, मुझे लगता है कि मुझे बस एक स्थानीय सॉकेट का उपयोग करना होगा (यह उम्मीद है कि सभी मोबाइल प्लेटफ़ॉर्म पर काम करना चाहिए) – Steven

+0

संदेश कतार विधियों को पिनवोक करना होगा .NET CF के साथ भी ? हम बस स्क्लाइट पुस्तकालयों के साथ दस्तक देने वाली गूढ़ पुरानी एसक्यूएल टेबल करने की सोच रहे थे।पॉइंट-टू-पॉइंट कतारों के लिए – RoboJ1M

+0

, हां, पी/Invoke एकमात्र विकल्प है। वे पहले से ही यहां किए गए हैं: http://msdn.microsoft.com/en-us/library/aa446556.aspx – ctacke

-1

आपने उपलब्ध सभी अड्डों को बहुत अधिक कवर किया है; COM, पाइप, सॉकेट, मेमोरी मैप की गई फ़ाइलें। विंडोज़ की सभी प्रक्रियाओं में पूरी तरह मेमोरी रिक्त स्थान हैं, इसलिए आप उन आईपीसी तंत्रों में से किसी एक का उपयोग किए बिना कुछ भी साझा नहीं कर सकते हैं।

-3

विंडोज मोबाइल पर मुझे याद है कि सभी प्रक्रियाओं को एक ही पता स्थान में मैप किया गया है। तो, ज्ञात नामों और कक्षा के नामों के साथ दोनों प्रक्रियाओं में संदेश विंडो बनाएं और दूसरे को खोजने के लिए प्रत्येक प्रक्रिया में FindWindow का उपयोग करें।

फिर, WM_APP परिभाषित संदेश आईडी के साथ SendMessage और wParam या lParam में संचारित करने के लिए डेटा के लिए एक सूचक।

यदि मैं गलत हूं और मोबाइल विभाजन प्रक्रिया मेमोरी करता है, तो बस WM_COPYDATA का उपयोग करें - डेस्कटॉप पर मेमोरी मैपिंग का उपयोग करता है और यह वास्तव में तेज़ है - ऐप्स के बीच डेटा भेजने के लिए।

0

चूंकि आपको सेवा (ए) के साथ संवाद करने के लिए केवल एप्लिकेशन (बी) की आवश्यकता है, तो आप आईओसीटीएल के परिभाषित सेट के साथ CreateFile और DeviceIoControl का उपयोग क्यों नहीं करते?

0

यहां से शुरू करने का अच्छा स्रोत है - http://msdn.microsoft.com/en-us/library/aa446520.aspx आप तय करते हैं कि आपकी आवश्यकताओं के लिए कौन सा विकल्प सबसे अच्छा फिट है।

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