نموذج ATL لاستدعاء (تنظيم) واجهات COM المترابطة من مؤشر ترابط عامل

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

سؤال

أنا أبحث عن نموذج تعليمات برمجية يوضح إجراء مكالمات COM ذات ترابط متقاطع في ATL COM Server DLL.أعرف واحد؟

المزيد من التفاصيل:

المكون الخاص بي هو كائن مساعد متصفح IE والذي يحتاج إلى العمل على سلسلة رسائل في الخلفية.في إحدى أساليب الكائن التي يتم استدعاؤها من مؤشر الترابط الرئيسي لـ IE، يعطيني IE مؤشرًا إلى IE DOM (IHtmlWindow2) وقمت بتخزينه في متغير عضو محلي.

أريد الآن إنشاء مؤشر ترابط عامل يمكنه استدعاء الأساليب بشكل غير متزامن على مؤشر واجهة COM الذي قمت بتخزينه للتو.

إذا كان الأمر مهمًا، فستحدث مكالماتي بعد عودتي من الطريقة التي حصلت فيها على مؤشر الواجهة من IE، لذلك سيكون لـ IE (وليس الكود الخاص بي) التحكم عندما أحاول إجراء المكالمات من مؤشر ترابط العامل الخاص بي.

كل من المكون الخاص بي والتطبيق المضيف عبارة عن شقة مترابطة.

هل يعرف أحد نموذجًا جيدًا لـ C++ يوضح كيف يتم ذلك؟

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

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

المحلول

يتم ذلك تلقائيًا في COM، فهو يعتني بمتطلبات الشقة وسيقوم بتنظيم المكالمة إذا كان مؤشر الواجهة له تقارب STA.يجب عليك تنظيم مؤشر الواجهة قبل استخدامه في مؤشر الترابط، لدى ATL أساليب المساعدة AtlMarshalPtrInProc() و AtlUnmarshalPtr() لتسهيل ذلك.CoMarshalInterThreadInterfaceInStream() أو IGlobalInterfaceTable إذا كنت تريد القيام بذلك بنفسك.

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