Frage

Überprüfen von unseren Code Ich habe eine merkwürdige Definition in einem der IDL-Dateien gefunden:

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

Wie kann eine Schnittstelle direkt von IUnknown abgeleitet möglicherweise eine duale Schnittstelle sein? Wird alles brechen, wenn ich das dual Attribut entfernen?

War es hilfreich?

Lösung

diese Antwort auf eine andere Frage in Bezug auf Benutzer voyce Punkte auf dieser Artikel diesem Grunde heißt es wie folgt:

Wenn eine Schnittstelle (IDispatch abgeleitete oder nicht) markiert ist entweder dual oder oleautomation (oder beides) ist speziell behandelt, wenn RegisterTypeLib() aufgerufen wird (was typischerweise durch DllRegisterServer gemacht wird). Für jede solche Schnittstelle eine HKCR \ Interface {} InterfaceID Schlüssel wird unter denen erstellt {00020424-0000-0000-C0000-000000000046} Klasse wird als Proxy / stub verwiesen. Diese Klasse-ID entspricht, wie Oleautomation Einweiser Einweiser auch bekannt typelib.

Andere Tipps

Ich kann keinen Grund sehen, dass die docs hier gegeben funktionieren würde: http://msdn.microsoft.com/en-us /library/aa366807(VS.85).aspx

  

Schnittstellen durch die Dual identifiziert   Attribut muss kompatibel sein mit   Automation und werden abgeleitet von   IDispatch. Dieses Attribut ist nicht   erlaubt auf Dispatch-Schnittstellen.

Es könnte sein, dass die [dual] Attribut fügt das Interface implizit IDispatch.

Was Sie tun können, ist, den Code überprüfen Sie die Schnittstelle implementieren (vorausgesetzt, diese ATL), wenn es von IDispatchImpl ableitet. Wenn ja, antwortet er tatsächlich für IDispatch Qi und können als solche verwendet werden.

Eine weitere Alternative ist ein Objekt der Umsetzung IOurInterface und QI es für IDispatch zu instanziiert -. Wenn es gelingt, wahrscheinlich Sie es nicht entfernen

Eigentlich kommen, daran zu denken, vielleicht ist [dual] technisch nicht erforderlich, dass Sie von IDispatch ableiten, solange Sie beide Ihre benutzerdefinierten Schnittstelle und IDispatch implementieren?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top