Ha il chiamante ha bisogno di rilasciare l'IShellBrowser * ottenuti tramite la WM_GETISHELLBROWSER non documentato messaggio (WM_USER + 7)?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Diversi hanno sottolineato che esiste un messaggio di non documentata che recupera il puntatore di interfaccia IShellBrowser dalla finestra HWND comune per il file aperto e salvare le finestre di dialogo.

Ma ci sono informazioni contrastanti (o nessuna informazione) sul fatto che puntatore è AddRef'd, o se è solo l'indirizzo grezzo restituito, e nessuna Release () dovrebbe essere chiamato su di esso?

È stato utile?

Soluzione

No. Si potrebbe trovare il seguente link utile: Le Regole del Component Object Model .

Estratto:

  

Regole di conteggio dei riferimenti

     

Regola 1: AddRef deve essere chiamato per   ogni nuova copia di un'interfaccia   puntatore, e di uscita per ogni chiamata   distruzione di un puntatore di interfaccia,   tranne regole dove successive   esplicitamente permettere altrimenti.

     

Le seguenti regole chiamano comune   nonexceptions alla Regola 1.

     
      
  • Regola 1 bis: In-Out-parametri alle funzioni. Il chiamante deve AddRef il parametro attuale, dal momento che sarà rilasciato dal chiamato quando l'out-valore è memorizzato su di esso.
  •   
  • Regola 1b: Scaricare una variabile globale. La copia locale del puntatore recuperato da una copia esistente del puntatore in una variabile globale deve essere indipendente a fare riferimento contato, perché funzioni chiamate potrebbero distruggere la copia in globale, mentre la copia locale è ancora vivo.
  •   
  • Regola 1c: Nuovi puntatori sintetizzati dal "nulla". Una funzione che sintetizza un puntatore usando conoscenze interne speciale, piuttosto che ottenere da qualche altra fonte, deve fare un AddRef iniziale sul puntatore di nuova sintesi. Esempi importanti di tali procedure includono le routine di creazione istanze, le implementazioni di IUnknown :: QueryInterface e così via.
  •   
  • Regola 1d: Restituzione di una copia di un puntatore memorizzato internamente. Dopo che il puntatore è stato restituito, il chiamato non ha alcuna idea di come la sua vita si riferisce a quello della copia memorizzata all'interno del puntatore. Così, il chiamato deve chiamare AddRef sulla copia puntatore prima di restituirlo.
  •   
     

Regola 2: conoscenza speciale sulla parte   di un pezzo di codice della   relazioni degli inizi e   le terminazioni delle vite di due o   più copie di un puntatore   può consentire AddRef / Stampa coppie di essere   omessi.

     
      
  • Dal punto di vista, di conteggio dei riferimenti di un client COM è sempre un concetto per-interfaccia. I clienti non dovrebbero mai assumere che un oggetto utilizza lo stesso conteggio di riferimento per tutte le interfacce.
  •   
  • I valori di ritorno di AddRef e Release non dovrebbe essere invocata, e dovrebbe essere utilizzato solo per scopi di debug.
  •   
  • stabilità Pointer; vedi dettagli nel file della Guida OLE in "Regole di conteggio dei riferimenti", sottosezione "Stabilizzare il puntatore this e mantenerlo valido."
  •   
     

Vedere la eccellente "Gestione Oggetto   Vite in OLE" articolo tecnico dal   Douglas Hodge, e il capitolo 3 del   Inside OLE, 2 ° edizione, da Kraig   Brockschmidt (MSDN Library, libri) per   maggiori informazioni su   riferimento conteggio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top