ما الفرق بين cocreateinstance () و cogetClassObject () عند إنشاء كائنات على نفس الجهاز؟

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

سؤال

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

كيف تختلف هذه الوظائف عند استخدامها لإنشاء كائنات على نفس الجهاز؟ هل تعمل بنفس الطريقة ولكنها تتسبب فقط في استدعاء رمز مختلف في خادم COM نفسه تمامًا؟

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

المحلول

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

يحتوي قسم MSDN على CogetClassObject على مناقشة موجزة حول كيفية الاستفادة من هذه الوظيفة.

نصائح أخرى

أحد السيناريو بالإضافة إلى ما قاله Jaredpar - يعيد لك CogetClassObject مصنعًا للصف (استدعاءات DllgetClassObject التي تم تصديرها من DLL في حالة الخادم INPROC). يستخدم مصنع الفصل لإنشاء إنشاء COCLASS. CoCreateInstance Insidency CoogetClassObject ، يحصل على مصنع الفصل المطلوب ثم يستخدمه لإنشاء إنشاء Coclass الذي طلبته. عند استدعاء Cocreateinstance ، لا يمكنك تأخير إنشاء Coclass. هناك أوقات يمكن أن تكون فيها إنشاء Coclass باهظة الثمن وتريد تأخير إنشاءها ولكن لا يزال بإمكانها الوصول إلى مصنع الفصل حتى تتمكن من إنشاء إنشاء Coclass عند الطلب.

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