سؤال

أنا أخطط لجعل تطبيقي الحالي في خادم RTD..

يتم كتابة التطبيق حاليا في C ++ وبينما سأقوم في النهاية بمنفذه إلى C # / Mono أريد أن أكون قادرا على إضافة وظيفة RTD مع C ++.

لقد وجدت بعض القطع العينة من التعليمات البرمجية (msvcrtdserver) وهذا الموقع: http://weblogs.asp.net/kennykerr/archive/2008/10/29/Excel-rtd-server-in-c.aspx.

لسوء الحظ، هذه هي DLL، وقد نسيت كل ما أعرفه من كوم (حسن الخلاص) منذ وقت طويل.

كيف أذهب في دمج أمثلة DLL في EXE؟ يبدو أن هذا هو التعبئة والتغليف خادم COM في EXE بدلا من DLL.

تعديل:

ملاحظة، يحتوي التطبيق الحالي على GUI MFC.

تعديل:

الاستخدام المقصود هو Taht، سيتم تشغيل تطبيق GUI الحالي - لا حاجة لعملاء واجهة COM / RTD لإطلاق التطبيق. (على الرغم من أنني لن أنكر من سيكون لطيفا)

أرغب في الأساس في تطبيق واجهة IRTDSERVER مع بياناتي الخاصة - بحيث يمكن إكسر (أو تطبيقات أخرى) الوصول إلى البيانات الديناميكية التي يوفرها التطبيق. (إنه برنامج يتحدث إلى جهاز ميناء تسلسلي - يحتوي هذا الجهاز على حالة / حالة يتغير وأريد أن أكون قادرا على تحديث العملاء على التغييرات غير متزاملة)

لذلك، أحتاج إلى إنشاء كائن COM وتسجيله بحيث يمكن للعملاء "رؤية" ذلك.

لست متأكدا من كيفية إضافة كائن COM إلى EXE ولديك كائن COM الذي يقوم بتنفيذ واجهة موجودة / precedfed.

تحرير بدأت Bounty على هذا حتى أتمكن من الحصول على عينات التعليمات البرمجية. على ما يبدو أنا كسول جدا وغبي جدا (أو ربما يكون مجرد كره فرط من كوم) للبدء في إجابة موجودة من قبل فرانسي بينوف. (وهو مفيد للغاية وبداية رائعة)

لذلك أساسا ما أبحث عنه هو:

الرمز لإجراء تطبيق MFC القائم على مربع الحوار الحالي الذي يحتوي على مجموعة من المواضيع قيد التشغيل وتحويله إلى خادم RTD (يحتوي على نفس UI)

كل ما cothisandthat، إلخ. أين أضع هذا الرمز في exe؟ كيف يمكنني تمديد / تنفيذ الأشياء IRTD؟

A قبل وبعد نموذج تطبيق MFC Hello World (مربع الحوار / الحوار) سوف تحصل على الإجابة المقبولة.

  1. قبل التطبيق مع جميع التعليمات البرمجية المصدر لتطبيق مربع حوار MFC.
  2. "بعد" التطبيق الذي يستند إلى تطبيق MFC في الخطوة رقم 1 الذي ينفذ واجهة SRVER RTD وجميع المصدر. (جميع ملفات المشروع، المصدر، إلخ)
  3. الخطوات التي اتخذت في GUI / Visual Studio وإلا لإنشاء الخطوة 2 من الخطوة 1. (IDL، إلخ ملفات أخرى تم إنشاؤها.)

من الناحية المثالية، يتم توفير ذلك ل VS2008، لكن أي إصدار سيعمل.

شكرا.

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

المحلول

تعديل: المتأنق، أنا لم أتطرق إلى MFC منذ عام 2000. كنت آمل أن أبقى بهذه الطريقة لبقية حياتي. :-) على أي حال...

على الرغم من ذلك، تطورت المعالجات منذ القرن الماضي. الخطوات التالية لإضافة دعم ATL COM لتطبيق و MFC هي ل VS 2008.

  1. إنشاء تطبيق بسيط في حوار MFC MFC يسمى MFCTEST. لا تحقق من مربع الاختيار الأتمتة في المعالج.
  2. انقر بزر الماوس الأيمن فوق المشروع وحدد إضافة / فئة ... في مربع الحوار، اختر كائن بسيط ATL. ستحصل على تحذير من أن دعم ATL ستضاف إلى المشروع.
  3. سيفتح معالج جديد مع خيارات كائن ATL الجديد.

يجب أن يتم ذلك.

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


تعديل: هذا يتحول ببطء إلى مقال. إذا ذهبنا مثل هذا، فقد نشرت حتى كتابا. :-)

بمجرد أن يكون لديك كائن ATL بسيط متكامل في مشروع MFC، يمكنك إضافة واجهة RTD إليه. ستحتاج إلى كل من الواجهة من الواجهة وإضافتها إلى COM_INTERFACE_MAP. وبعد منذ واجهة RTD هي IDispatch واجهة، سيتعين عليك ترث صفك من IDISPatchimpl <> وإضافة IDISPatch إلى COM_INTERFACE_MAP استخدام COM_INTERFACE_ENTRY2 (من أجل تحديد أنها تنفذ من خلال IRtdServer.

أنا لست على دراية بهذا كيفية عمل RTD. قد تضطر أيضا إلى إضافة دعم لنقاط اتصال COM إلى صفك، إذا احتاجت Excel إلى الوزير على التحديثات الخاصة بك. إليك أيضا رابط لتحديث الخاص بك نقاط الاتصال في ATL المعرفه.

راجع للشغل، لقد تعثرت على هذا المدونة وظيفة لديه تعاريف C ++ من واجهات اثنين RTD. وبعد ربما لديك بالفعل لهم، لكنني اعتقدت أنني سأضيفها من أجل التوافق.


ستكون أسهل طريقة إنشاء مشروع جديد ATL EXE من خلال معالج VS واتركه من التسجيل وجزء إدارة العملية. الباقي ليس مختلفا.

إذا كنت بحاجة إلى عينة معينة ل Jumpstart رحلتك إلى أرض COM خارج Proc، يمكنك إلقاء نظرة على labrador..

ربطان الروابط التي قد تكون ذات مصلحة لك:

تعديل: إذا كنت بحاجة فقط لمعرفة كيفية تسجيل كائن في EXE الخاص بك مع COM، فيمكنك تطبيقات العميل CoCreateInstance ذلك، تحقق من coregisterclassobject.. وبعد ومع ذلك:

  • يجب أن يكون الكائن كائن COM
  • تحتاج إلى تنفيذ مصنع فئة لذلك
  • إذا كنت تريد إدارة العمليات (أي، فستبدأ COM التطبيق الخاص بك عند الطلب)، فسيتم تسجيل NEES ClassID في التسجيل
  • إذا كان العميل سيقوم بإنشائه من خلال ProgID، يجب تسجيل البروجيد في التسجيل
  • قد تحتاج إلى وكيل / كعب كعب مخصص، إذا كنت تقوم بالتنظيم العرف
  • إذا كان التطبيق الخاص بك يحتوي على واجهة المستخدم، فسيتعين عليك تعديل منطق إيقاف التشغيل، بحيث عند إغلاق المستخدم UI، لا يتم إنهاء التطبيق حتى يتم إصدار آخر مرجع COM إلى الكائنات الخاصة بك أيضا

تحرير 2: ما زلت أقترح عليك أن تنظر إلى عينة ATL Out-Of-Proc وفي الهيكل العظمي، سيولد معالج ATL لفهم تسلسل العمليات. ومع ذلك، قد تحتاج إلى الخوض قليلا في رمز ATL لمعرفة ما يجري بالضبط.

إليك النسخة القصيرة من العملية:

عند بدء التشغيل، تطبيق NEES للتحقق من وجود وسيطة سطر الأوامر معينة - /المضمن. وبعد إذا كانت هذه الحجة موجودة، فهذا يعني أن التطبيق يتم إطلاقه بواسطة COM استجابة لإجراء مكالمة كوكو. قد يختار التطبيق عدم إظهار واجهة المستخدم في هذه المرحلة.

ما إذا كان التطبيق يظهر UI أم لا، يجب عليه تسجيل المصانع الفئة لأي كائنات COM توفر من خلال API CoregisterClassObject أعلاه.

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

إذا كان التطبيق قد بدأ المستخدم ويتم إغلاق LAS UI، يجب أن يتحقق التطبيق ما إذا كانت هناك مراجع COM المعلقة إلى أي كائن فيه. إذا لم يكن هناك شيء، فيمكنه إيقاف نفسه. ومع ذلك، إذا كانت هناك مراجع COM، يجب أن يخفي التطبيق UI، ولكنه متابعة التشغيل حتى يتم إصدار المرجع الأخير.

إذا وصل التطبيق إلى نقطة سيتم إيقاف التشغيل، فيجب أن يبطئ جميع تسجيلات المصانع الفئة.

نصائح أخرى

أنت تنظر إلى التعليمات البرمجية الخاصة بك في مشروع خادم ATL. انظر العينات في عينات خادم ATL. .

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