سؤال

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

نص Alt http://img32.imageshack.us/img32/8902/integration1.png.

كما ذكرت، أريد دمج (تلقي وإرسال البيانات) تطبيقاتي مع التطبيقات الخارجية أو SDKS. عادة هناك نوعان من البيانات من التطبيقات الخارجية:

  1. بيانات عامة / مشتركة - والتي هي ذات صلة دائما
  2. بيانات محددة - والتي يجب التعامل معها بشكل مختلف عن كل تطبيق خارجي

مع "التطبيق الأساسي"، يمكن وصف الوضع المطلوب في هذا المخطط:

نص Alt http://img32.imageshack.us/img32/3299/integration2.png.

يتم التعامل مع البيانات العامة في التطبيق الأساسي، ويتم التعامل مع البيانات المحددة في الإضافات (إضافات الدعم).

قد يكون توزيع هذا التطبيق أحد

  • تطبيق أساسي + تطبيق Yakko + Yakko App Integrator + Yakko App دعم البرنامج المساعد
  • تطبيق أساسي + تطبيق DOT + DOT Integrator

للتطبيق الآخر، أريد أن أبقي نفس "التكامل"، ولكن للتعامل معها بطريقة مختلفة داخل التطبيق:

نص Alt http://img32.imageshack.us/img32/2088/integration3x.png.

كيف تنصحمنا تنفيذ الدعم في تطبيقاتي لإدماج التطبيقات الخارجية و SDKS، كما وصفت للتو؟

ملاحظات:

  • أنا أستخدم C ++ على Windows ويتم توزيع الإضافات ك DLLs.
  • يعرف أنواع البيانات التي سيتم استخدامها دائما مقدما، أريد فقط بعض طريقة عامة لتحريكها من المصدر إلى المعالج.
هل كانت مفيدة؟

المحلول

وأنا أتفق مع المعلق، يبدو كوم استراتيجية جيدة. يتم تسجيل DLLs الدعم الخاص بك عند تثبيتها، ثم يمكن للتطبيق الأساسي البحث عن الإضافات، شيء مثل:

hr = CLSIDFromProgID(L"Wakko.1.0", &clsid);  
hr = GetActiveObject(clsid, NULL, &punk);

أو
hr = CoCreateInstance(clsid, ...,..., IID_IWAKKO, ...);

نصائح أخرى

انظر إلى خيارات IPC التي لدى Windows هنا

بالنسبة لي وكذلك كوم يبدو وكأنه خيار جيد هنا.

هناك طريقة أخرى للقيام بذلك سيكون لديك تطبيق أساسي يعمل على تشغيل خادم يستمع إلى المكالمات من الإضافات الخاصة بك. يمكنك تحقيق ذلك باستخدام أنابيب الأسماء. الآن، ستستخدم تطبيقات دعمك هذه الإضافات للتواصل (عبر الأنابيب المسماة) مع تطبيقك الأساسي.

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