2011-11-08 14 views
2

私はSHChangeNotifyのための以下の宣言を持っている:SHCNF_FLUSHNOWAITパラメータでSHChangeNotifyが呼び出されたときにパラメータに割り当てられたメモリを解放できますか?

[DllImport("Shell32.dll")] 
public static extern void SHChangeNotify(HChangeNotifyEventID wEventId, HChangeNotifyFlags uFlags, IntPtr dwItem1, IntPtr dwItem2); 

は、次のコード安全ですか?

IntPtr ptr = Marshal.StringToHGlobalUni(@"C:\foo\bar.txt"); 
Shell.SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, ptr, IntPtr.Zero); 
Marshal.FreeHGlobal(ptr); 

The doc on SHCNF_FLUSHNOWAIT「機能が影響を受けるすべてのコンポーネントに通知を配信開始する必要がありますが、すぐに通知プロセスが開始されたとして返すべきである」と述べています。

私はptrでFreeHGlobalを呼び出すときに、まだどこかで使用できるメモリを解放することが心配か、文字列のコピーでSHChangeNotifyが動作するのでしょうか?

私のテストでは、私のコードが動作しているが、私はそれを展開し、問題が後で発生する表示したくない...

答えて

4

SHChangeNotifyはあなたの文字列のコピーを取ることを示しています。 SHChangeNotifyへの呼び出しが返されると、安全に、そして実際には、メモリを解放することができます。

+1

これについて考えるなら、それがうまくいく可能性があります。 (そうでなければ、いつメモリを解放するのが安全だったのか、あなたはどのように分かっていますか?) –

+0

はい、そうです、私は昨日本当に疲れていたに違いない... –

関連する問題