Несколько указали, что существует недокументированное сообщение, которое извлекает указатель интерфейса IShellBrowser из общего диалогового окна HWND для открытого файла &.Должен ли вызывающий абонент освобождать IShellBrowser *, полученный через недокументированное сообщение WM_GETISHELLBROWSER (WM_USER + 7)?
Но есть ли противоречивая информация (или нет информации) о том, является ли этот указатель AddRef'd, или если это только исходный адрес, и не нужно вызывать Release()?
к сожалению. - Я чувствую себя немного толстая Но ваше первое утверждение: «нет», как ни в мне не нужно, чтобы освободить() возвращаемый IShellBrowser * -. все же документация для правила 1 (и, особенно, его исключений), как представляется, указывает на то, что указатель, который я передал, будет h ave был AddRef'd от моего имени (так же, как это сделал QueryInterface). – Mordachai
Вы можете вызвать AddRef()/Release() вручную на этом объекте, если хотите, как указано в правиле 1c («хочу» я имею в виду, что время жизни объекта управляется диспетчером окон). Но вам не нужно вызывать только Release(). – arul
Так вы понимаете, что это особый случай 1c (я вижу, как это имеет смысл, основываясь на названии 1c). И если это так, 1c говорит в основном, что он не является ни выходным, ни in-in, ни inout-параметром, а синтезированным, и как таковой должен быть как AddRef'd, так и Releaseed вызывающим (или, как это, очевидно, имеет место здесь, и если я не попытался удержать указатель дольше, чем время жизни текущего IShellBrowser, что не произойдет в моем пользовательском обработчике OPENFILEDIALOG). – Mordachai