كيفية القيام بـ COM خالية من التسجيل في بنية مكون من ذلك

StackOverflow https://stackoverflow.com/questions/1770463

  •  21-09-2019
  •  | 
  •  

سؤال

نحن نستخدم ملفات واضح للقيام COM خالية من التسجيل ، كما قمت أيضًا بتوضيح في هذا السؤال الآخر.

نحن الآن نحاول استخدام COM خالية من التسجيل مع تطبيق يدعم المكونات الإضافية. المكونات الإضافية هي ملفات OCX التي يمكن إضافتها إلى مجلد التطبيق الرئيسي بعد تثبيت التطبيق الرئيسي بالفعل.

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

هل هناك طريقة لتقسيم الملف الواضح للتطبيق الرئيسي بطريقة أو بأخرى ، بحيث يمكن لكل مكون إضافي إضافة الجزء الخاص به بأمان كملف منفصل؟ أو طريقة آمنة أخرى لتصحيح ملف البيان؟

في حال كان الأمر مناسبًا: نقوم بإنشاء مثبتاتنا مع ويكس.

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

المحلول

لا أوصي بتعديل ملف البيان للتطبيق ؛ هذا يبدو هشًا إلى حد ما وسيعمل فقط إذا كان يعيش في موقع قابل للكتابة.

عند بدء التشغيل ، يتم استخدام بيان التطبيق لإنشاء "سياق تنشيط" يتم دفعه كسياق تنشيط على مستوى العملية. لكن كل مؤشر ترابط يحتوي أيضًا على مكدس سياق التنشيط ، والذي يمكن معالجته مباشرة. تبدو العمليات على مؤشر ترابط معين على حد سواء في السياق الأعلى على المكدس وسياق التنشيط على مستوى العملية عند البحث عن بيانات تسجيل COM.

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

  1. قم بتضمين البيان الخاص بالمكون الإضافي كإصدار ID2 في المكون الإضافي وتجميعه مع الماكرو العزلة يعرف. يلف واجهات برمجة تطبيقات Windows الشائعة التي تحتاج إلى سياق من بيان لتنشيط وتنشيط سياق التنشيط المناسب حول المكالمة تلقائيًا.

  2. تنشيط/إلغاء تنشيط سياق التنشيط المناسب على مؤشر الترابط حول جميع نقاط الإدخال في البرنامج المساعد. يتم ذلك من خلال واجهات برمجة تطبيقات سياق التنشيط. يتم القيام بذلك بسهولة مع التنشيط كائن إدارة السياق.

نصائح أخرى

إذا كنت تستخدم .NET ، يمكنك الاستخدام الرمز يظهر في هذه الإجابة لرعاية سياقات التنشيط.

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