ما هي الفائدة من _MERGE_PROXYSTUB؟
سؤال
ولقد ولدت كائن ATL COM باستخدام VS2008 ورمز يحتوي على مراجع إلى تعريف دعا _MERGE_PROXYSTUB
(لأنني اخترت الخيار 'دمج وكيل / كعب "عندما ركضت في البداية المعالج).
ما هي الفائدة من وكيل / كعب؟ لو لم تقم بتحديد الخيار دمج ثم أحصل على MyControlPS.DLL
منفصلة بدلا من ذلك -؟ متى هذا من أي وقت مضى أن تستخدم
وFWIW يبدو أن السيطرة على التسجيل وتعمل بشكل جيد إذا قمت بإزالة كافة التعليمات البرمجية محاطة يحدد _MERGE_PROXYSTUB
. وبناء التصحيح حتى لا يعرف _MERGE_PROXYSTUB
وأنه لا يزال يعمل موافق.
وهكذا، يمكنني القيام به من دون وكيل / كعب؟
المحلول
وكنت في حاجة الى وكيل / كعب إذا كنت تريد كائن COM الخاص بك ليتم استدعاؤها من تطبيق باستخدام نموذج خيوط مختلفة من كائن COM الخاص بك.
وعلى سبيل المثال، لدينا المكونات في أن يحصل على تحميلها بواسطة تطبيق يستخدم طراز مؤشر ترابط معين (لا يمكن أن تذكر أي)، ولكن كائن COM لدينا هو شقة مؤشرات (MTA) - لذلك يطلب من الوكيل / كعب لمارشال البيانات بين الكائنات عندما يتم استدعاء دالة، في حين لا يزال التمسك بقواعد طراز مؤشر الترابط.
إذا تم كسر هذه القواعد، ثم COM إما بطرح استثناء أو إرجاع HRESULT فشل مثل <م> RPC_E_WRONG_THREAD م>
إذا كنت لا تحقق الخيار وكيل / كعب الدمج، ثم استوديو البصرية ينتج المشروع منفصلة عن الوكيل / بذرة التي تحصل على بناء إلى دلل منفصلة. هذا يجعل الأمور أكثر صعوبة لنشرها إذا كانت مطلوبة، ولكن يمكنك أساسا مجرد تجاهلها إذا كنت لا تتأثر خيوط القضايا النموذج.
وهكذا يمكنك القيام به دون وكيل / بذرة إذا كان التطبيق استدعاء كائن COM يستخدم نفس طراز مؤشر الترابط وجوه الخاص بك
لاري اوستيرمان يوفر مقدمة للقراءة إلى نماذج خيوط أ > على بلوق.
نصائح أخرى
وأيضا، إذا الواجهات الخاصة بك تحتوي فقط اكتب-صديقة للمكتبة أنواع (BSTR، VARIANT، الخ) وتظهر في كتلة مكتبة IDL الخاص بك، يمكنك أن تختار أن يكون لهم "مكتبة نوع تنظيمها" معنى أن تقدم نظام يستخدم وكيل / كعب والبيانات الفوقية من مكتبة نوع.
وعندما يتم وضع واجهات داخل كتلة المكتبة، ويتم تخصيص نجح dllregisterserver تسجيل مكتبة نوع (تمرير TRUE إلى XxxModule :: نجح dllregisterserver، إذا لم تخني) سيتم تنظيمها واجهات من قبل النظام، إذا لزم الأمر، كما وصفها جون Sibly.
وعند هذه النقطة، لا تستخدم حتى وكيل / كعب، لذلك _MERGE_PROXYSTUB
أي تأثير.