16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:SHBrowseForFolder のオブジェクト化"
この発言は #00870 寅次 さんのSHBrowseForFolder のオブジェクト化 に対するコメントです
寅次さん、こんにちは。ナリです。
》function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam, lpData: LPARAM)
》: Integer; stdcall;
》 (* SHBrowseForFolder のコールバック *)
この中の・・・・
》 else if uMsg=BFFM_SELCHANGED then begin
》 SHGetPathFromIDList( PItemIDList( lParam ),
》 PChar( Path ) );
ここで使ってる PItemIDList(lParam) は Free する必要がありません。とい
うか Free しちゃやばいです。たしかこのポインタって SHBrowseForFolder の
戻り値と同じだった記憶が・・・・(^^;)。
まぁ、Free しちゃってもその領域が破壊されることの方が少ないんでちゃん
と動いてるように見えるんですが・・・・サブクラス化とかしちゃうと壊れる確
率が上がるみたいで、ごくまれに AccessViolation が発生します。
SHGetSpecialFolderLocation や SHBrowseForFolder の場合は「この関数で取
得したポインタは使い終わったらアプリ側で解放せよ」ってヘルプに書いてある
んですが SHGetPathFromIDList の場合は書いていないですし (^^)。
** 1999-05/16 [LDN03147@nifty.ne.jp / narikawa@prostock.com] **
Original document by ナリ 氏 ID:(LDN03147)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|