سؤال

في مشروع C ++ (أي لا .NET) على ويندوز موبايل، أنا أبحث عن وسيلة للتواصل بسهولة بين اثنين من التطبيقات التي تعمل بشكل مستقل. أن تطبيق وتشغيل الخدمة، في حين أن تطبيق B من شأنه أن يوفر للمستخدم بعض وظائف - والتي لديها B لاستدعاء بعض وظائف أ. أنا لا ترغب في الذهاب من خلال تنفيذ أي شيء في COM.

في الحقيقة، أنا يفضل عدم القيام بأي نوع من التسلسل أو ما شابه ذلك (أي أن هذا من شأنه أن يستبعد استخدام مآخذ / أنابيب / الملفات)، ولكن بدلا من أن يكون B تمرير جميع المعلمات ومؤشرات لأكثر من A، تماما مثل إذا وكانوا جزءا من B. أيضا، تطبيقات C، يجب أن تكون قادرة على أن تفعل الشيء نفسه مع حالة واحدة فقط ليعمل D و E.

وأود أن أضيف أن B أحيانا من المفترض أن تعود مجموعة (أو الأمراض المنقولة جنسيا :: ناقلات الأمراض المنقولة جنسيا أو :: خريطة) إلى A حيث حجم غير معروف سابقا.

هل هذا ممكن على ويندوز موبايل، وربما غيرها من المنصات؟

هل كانت مفيدة؟

المحلول

وأنت لا يمكن أن تبادل البيانات عبر العمليات. أنا لا أوصي COM. لا وجود أنابيب في نظام التشغيل Windows CE. أفضل طريق هو إما الملف المعين (ومثل على سطح المكتب) أو إلى نقطة طابور رسالة (وشيء مثل على سطح المكتب). أيهما أفضل يعتمد على السيناريو الاستخدام الخاص بك.

هل <م> لا محاولة استخدام الذاكرة عبر عملية مع VirtualAlloc كما اقترح، كما انها الإختراق غير آمنة غير آمنة وغير معتمد على CE 6.0 أو في وقت لاحق لذلك فسوف ينتهي كسر تحت WinMo 7 و في وقت لاحق .

وأنا لا أنصح باستخدام الرسائل النوافذ وWM_COPYDATA. انها بطيئة، kludgy، وعرضة للغاية لأخطاء.

والناس، من فضلك لا مجرد الإجابة على الأسئلة عندما كنت لا تستخدم منصة مجرد محاولة لكسب نقاط السمعة. إذا كنت لا تعرف النظام الأساسي، والسماح لشخص آخر يساعد الرجل بدلا من ارساله على مطاردة أوزة برية.

نصائح أخرى

ومنذ ما عليك سوى التطبيق (B) للاتصال مع خدمة (A)، لماذا لا مجرد استخدام CreateFile وDeviceIoControl مع مجموعة محددة من IOCTLS؟

وهنا هو مصدر جيد للبدء مع - HTTP: // MSDN. microsoft.com/en-us/library/aa446520.aspx عليك أن تقرر أي خيار هو الأنسب لاحتياجاتك.

ولقد غطت حد كبير كل القواعد المتاحة؛ COM، أنابيب، والمقابس، والذاكرة المعينة الملفات. جميع العمليات في نظام التشغيل Windows لديها مساحات ذاكرة منفصلة تماما، لذلك لا يمكنك مشاركة أي شيء دون استخدام واحدة من تلك الآليات IPC.

في ويندوز موبايل ويبدو لي أن نتذكر أن يتم تعيين جميع العمليات في نفس مساحة العنوان. لذلك، إنشاء نوافذ الرسالة في كلتا العمليتين مع أسماء معروفة وأو أسماء فئة واستخدام FindWindow في كل عملية للعثور على الآخر.

وبعد ذلك، SendMessage مع WM_APP تعريف معرف رسالة ومؤشر إلى البيانات لنقل في wParam أو lParam.

إذا كنت مخطئا والمتنقلة لا ذاكرة عملية التقسيم، ثم مجرد استخدام WM_COPYDATA التي - على يستخدم سطح المكتب تعيين ذاكرة وذلك هو حقا سريعة - لإرسال البيانات بين التطبيقات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top