هل هناك طريقة لربط أو اعتراض CoGetClassObject و/أو CoCreateInstance المكالمات ؟

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

سؤال

أود أن اعتراض COM CoCreateInstanceEx و/أو CoGetClassObject وظائف استبدال فئة مع اختبار الرقائق في اختبار وحدة.هذا لن يكون إلا لفترة واحدة CLSID;كل الآخرين يمكن أن تمر دون تغيير.هل هناك طريقة للقيام بذلك دون الرهيبة ، الشر الخارقة ؟

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

المحلول

ذلك يعتمد على ما تريده بالضبط.

إذا كنت ترغب في الكشف عن من هو تحميل تلك الفئة أو للعثور على ما إذا كان يتم تحميل في جميع يمكنك استخدام مراقبة عملية.دعوة إلى CoGetClassObject() (أو CoCreateInstanceEx()) سوف يؤدي إلى HKCR\CLSID\{Class of interest id} الرئيسية قراءتها و مراقبة العملية سوف تظهر لك ما هي العملية و متى و كيف نجاحا.

إذا كنت تريد استبدال فئة موجودة مع يدكم - ترجمة مكتبة مع الإصدار الخاص بك من الطبقة مع نفس معرف الفئة و تغيير المسار إلى ملقم COM داخل HKCR\CLSID\{Class of interest id} حيث أن المكتبة تستخدم لخدمة فئة مع أن الهوية.يمكنك أن تفعل ذلك يدويا أو مع regsvr32 - التسجيل أولا الأصلي المكتبة, ثم لك أن تجاوز فئة من مصلحة التسجيل.كوم لا معرف الفئة -> مكتبة الخرائط من خلال هذا المفتاح عند المستهلك المكالمات CoGetClassObject() أو CoCreateInstanceEx().

نصائح أخرى

هناك دائما CoTreatAsClass وظيفة:http://msdn.microsoft.com/en-us/library/ms693452(مقابل.85).aspx

ولكن كما لاحظت سيكون على نطاق المنظومة استبدال الطبقة ، لا تغيير محلي.

بدلا من ذلك, يمكنك أن تنظر في تركيب CoCreateInstance كما اقترح في هذا المنصب المشار إليه من قبل شاي Erlichmen تعليق.

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