أي معنى في الاحتفال واجهة المستمدة IUnknown كما هو مزدوج في IDL؟

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

سؤال

ومراجعة نظامنا لقد وجدت تعريف غريبة في واحدة من الملفات .idl:

[
    object,
    uuid(uuidhere),
    dual,
    nonextensible,
    oleautomation,
    hidden
]
interface IOurInterface : IUnknown {
    //methods here
};

وكيف يمكن واجهة المستمدة مباشرة من IUnknown ربما يكون واجهة مزدوجة؟ وكسر أي شيء إذا كنت إزالة السمة dual؟

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

المحلول

في هذه الإجابة على سؤال آخر بشأن التعبئة نقطة المستخدم voyce ل<لأ href = "http://www.microsoft.com/msj/ 0199 / كوم / com0199.aspx "يختلط =" نوفولو noreferrer "> هذه المقالة التي في الأساس على ما يلي:

وعند وضع علامة أي واجهة (IDispatch والمستمدة أم لا) إما dual أو oleautomation (أو كليهما) يتم التعامل معها خاصة عندما يتم استدعاء RegisterTypeLib() (والتي عادة ما قام به نجح dllregisterserver). لكل واجهة مثل يتم إنشاء {} InterfaceId مفتاح HKCR \ واجهة التي بموجبها تتم الإشارة إليه {00020424-0000-0000-C0000-000000000046} الفئة كما وكيل / كعب. هذا معرف فئة يتوافق مع typelib marshaller المعروف أيضا باسم marshaller oleautomation.

نصائح أخرى

وأنا لا أرى سببا التي من شأنها أن تعمل، نظرا للمستندات هنا: http://msdn.microsoft.com/en-us /library/aa366807(VS.85).aspx

<اقتباس فقرة>   

واجهات التي حددها المزدوج   يجب أن يكون سمة متوافق مع   أتمتة وتكون مستمدة من   IDispatch و. هذه السمة ليست   يسمح على dispinterfaces.

ويمكن أن يكون هذا [dual] السمة ضمنيا يضيف IDispatch إلى الواجهة.

ما الذي يمكن القيام به هو التحقق من رمز تنفيذ واجهة (على افتراض هذا ATL) إذا كان يستمد من IDispatchImpl. إذا كان الأمر كذلك، فإنه يستجيب في الواقع إلى تشى لIDispatch ويمكن استخدامها على هذا النحو.

وثمة بديل آخر هو إنشاء مثيل تنفيذ IOurInterface الكائن وQI ذلك لIDispatch - إذا نجحت، وربما كنت لا يمكن إزالته

والواقع، حان للتفكير في ذلك، وربما [dual] لا تتطلب من الناحية الفنية أنك تستمد من IDispatch طالما أنك تنفيذ كل واجهة مخصصة وIDispatch؟

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