Est-ce que l'appelant a besoin pour libérer le IShellBrowser * obtenu par le message WM_GETISHELLBROWSER sans papier (WM_USER + 7)?

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

  •  19-09-2019
  •  | 
  •  

Question

Plusieurs ont fait remarquer qu'il existe un message sans papier qui récupère le pointeur d'interface IShellBrowser de la HWND dialogue commune pour le fichier ouvert et enregistrer des boîtes de dialogue.

Mais il y a des informations contradictoires (ou pas d'informations) si ce pointeur est AddRef'd, ou si elle est juste l'adresse brute retournée, et pas de presse () doit être appelée à ce sujet?

Était-ce utile?

La solution

Non. Vous trouverez peut-être le lien suivant utile: Les règles du Component Object Model .

Extrait:

  

Règles de comptage de référence

     

Règle 1: AddRef doit être appelé à   chaque nouvelle copie d'une interface   pointeur et Release appelé pour chaque   destruction d'un pointeur d'interface,   sauf si les règles suivantes   explicitement permettre autrement.

     

Les règles suivantes appellent commun   nonexceptions à la Règle 1.

     
      
  • Règle 1a: In-out-paramètres aux fonctions. L'appelant doit Addref le paramètre réel, car il sera libéré par le callee lorsque le hors-valeur est stockée sur le dessus de celui-ci.
  •   
  • Règle 1b: Récupérer une variable globale. La copie locale du pointeur d'interface extraite à partir d'une copie existante du pointeur dans une variable globale doit être indépendante de référence prise en compte, car les fonctions appelées pourraient détruire la copie dans l'économie mondiale alors que la copie locale est encore en vie.
  •   
  • Règle 1c: pointeurs nouveaux synthétisés sur « l'air. » Une fonction qui synthétise un pointeur d'interface à l'aide des connaissances internes spéciales, plutôt que de l'obtenir d'une autre source, doit faire une AddRef initiale sur le pointeur nouvellement synthétisé. Des exemples importants de ces routines comprennent exemple des routines de création, les implémentations de IUnknown :: QueryInterface, et ainsi de suite.
  •   
  • Règle 1d: Renvoi d'une copie d'un pointeur stocké en interne. Après le pointeur a été retourné, le callee n'a aucune idée de la façon dont sa durée de vie se rapporte à celle de la copie stockée en interne du pointeur. Ainsi, l'appel doit AddRef callee sur la copie du pointeur avant de le retourner.
  •   
     

Règle 2: Connaissances particulières de la part   d'un élément de code de la   relations des débuts et   les terminaisons des durées de vie de deux ou   plusieurs copies d'un pointeur d'interface   peut permettre à des paires AddRef / Release pour être   omis.

     
      
  • Du point de vue du client COM, comptage de référence est toujours un concept par interface. Les clients ne doivent jamais supposer qu'un objet utilise le même nombre de référence pour toutes les interfaces.
  •   
  • Les valeurs de retour de AddRef et Release ne doit pas être invoqué, et doit être utilisé uniquement à des fins de débogage.
  •   
  • stabilité du pointeur; voir les détails dans le fichier d'aide OLE sous la rubrique « Règles de comptage de référence, » paragraphe « Stabiliser le pointeur this et de le garder valide ».
  •   
     

Voir l'excellent « Gestion de l'objet   Lifetimes dans OLE » article technique par   Douglas Hodges, et le chapitre 3   Inside OLE, 2ème édition, par Kraig   Brockschmidt (MSDN Library, livres) pour   plus d'informations sur   de comptage de références.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top