Sollte ein Implementierer von IShellBrowser :: QueryActiveShellView Methode aufrufen AddRef für den Anrufer?

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

Frage

Ich versuche, eine IShellBrowser zu implementieren. Ein Verfahren zur Herstellung solcher ist:

HRESULT STDMETHODCALLTYPE IShellBrowser::QueryActiveShellView(/* [out] */ __RPC__deref_out_opt IShellView **ppshv)

Dies wird die aktiven Shell Ansicht Zeiger für den Anrufer (in meinem Fall gibt es nur eine Shell-Ansicht zu einem bestimmten Zeitpunkt).

Aber es ist sehr unklar, ob ich AddRef im Namen des Anrufers nennen soll, oder ob es in der Tat ist die Verantwortung des Anrufers ihre eigenen AddRef / Veröffentlichung zu tun?

Ich bin überhaupt kein Fan von Programmier-by-Side-Effekt - und das ist genau das, was AddRef wäre -. Eine versteckte Erwartung auf dem Anrufer, dass der Anrufer nicht unbedingt wissen würde, über

Und Blick auf die Dokumentation für IShellBrowser :: QueryActiveShellView, sie machen keine Erwähnung überhaupt. Aber ein Blick auf IUnknown :: AddRef, sehen wir, dass jede Methode, die eine Kopie eines Interface-Zeiger macht sollte AddRef nennen - http://msdn.microsoft.com/en-us/library/ms691379%28VS.85%29.aspx

  

Rufen Sie diese Methode für jede neue Kopie eines Interface-Zeiger, die Sie machen. wenn Sie eine Kopie eines Zeigers zurück von einem Verfahren werden zum Beispiel geben, müssen Sie AddRef auf diesem Zeiger nennen.

War es hilfreich?

Lösung

Ja, hat COM einen sehr detaillierten Vertrag über dieses Verhalten: alle [out] Parameter müssen (im Fall von Werttypen) kopiert werden oder AddRef: ed. (Im Fall des Schnittstellenzeigers)

Also, sollten Sie auf jeden Fall AddRef.

Andere Tipps

Es ist eine typische Situation - Sie Eigentum an der Schnittstelle-Zeiger an den Aufrufer übergeben. So rufen Sie AddRef() und der Anrufer wird Release() anrufen, wenn es nicht mehr braucht das Objekt gezeigt wird.

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