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が動作するのでしょうか?
私のテストでは、私のコードが動作しているが、私はそれを展開し、問題が後で発生する表示したくない...
これについて考えるなら、それがうまくいく可能性があります。 (そうでなければ、いつメモリを解放するのが安全だったのか、あなたはどのように分かっていますか?) –
はい、そうです、私は昨日本当に疲れていたに違いない... –