أي معنى في الاحتفال واجهة المستمدة IUnknown كما هو مزدوج في IDL؟
-
06-07-2019 - |
سؤال
ومراجعة نظامنا لقد وجدت تعريف غريبة في واحدة من الملفات .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
؟