معلومات إضافية: استدعاء الدالات Shell والواجهات من مؤشرات ترابط متعددة

ملخص

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

مزيد من المعلومات

استدعاء CoInitializeEx(COINIT_MULTITHREADED) يسمح بإجراء المكالمات للكائنات التي تم إنشاؤها على مؤشر ترابط استدعاء ليتم تشغيله على أي مؤشر ترابط. عند الوصول إلى الكائنات التي تستخدم نموذج من حيز متعددة مؤشرات ترابط الأجزاء، سيتم مزامنة COM الوصول إلى الكائن. من أجل هذا حدوث المزامنة، يجب تنظيم COM استدعاءات للكائن. سبب shell حاليا لا توفر المعلومات اللازمة، أما من خلال مكتبة الأنواع أو الوكيل/طرف البرنامج التعليمات البرمجية للكائنات الخاصة بها لتنظيم، يحاول الوصول إلى كائنات shell من فشل ذات مؤشرات ترابط متعددة.


فيما يلي أمثلة لكيفية تأثير استدعاءات CoInitializeEx(COINIT_MULTITHREADED) على الوظائف التي تعتمد على كائنات shell:

GetOpenFileName/GetSaveFileName
يمكن للمستخدمين الانتقال إلى المجلدات ملحق مساحة الاسم مثل "المستندات" من خلال مربعات الحوار فتح وحفظ باسم . ومع ذلك، لا يمكن استعراض هذه المجلدات إلى لأن المستعرض لا يمكن إنشاء الواجهات المطلوبة، مثل إيشيلفولدير.
ShellExecute/ShellExecuteEx
يمكن كتابة خطافات ShellExecute توسيع وظيفة ShellExecute/شيليكسيكوتيكس عن طريق تطبيق واجهة إيشيلكسيكوتيهوك. عندما يتم استدعاء ShellExecute/شيليكسيكوتيكس، لا يمكن تحميل خطافات ShellExecute المسجلة.
في كل من هذه الأمثلة، سوف يفشل المكون الذي يحاول الحصول على مؤشر واجهة إلى كائن shell ب CoCreateInstance، IUnknown::QueryInterface، وما إلى ذلك عادة مع خطأ E_NOINTERFACE عند استدعائه من الشقق ذات مؤشرات الترابط المتعددة. والسبب، كما هو موضح أعلاه، لم معلومات أو وكيل/كعب روتين رمز نوع الكائنات المطلوبة.

المراجع

"العملية، مؤشرات الترابط، والشقق" ضمن المبادئ الأساسية COM في وثائق النظام الأساسي SDK:

خصائص

رقم الموضوع: 287087 - آخر مراجعة: 22‏/01‏/2017 - المراجعة: 1

تعليقات