■4870 / ) |
Re[5]: SHFreeMallocの使い方 |
□投稿者/ 倉田 有大 (31回)-(2007/06/27(Wed) 22:04:21)
|
■No4867 (とっちゃん さん) に返信 > ■No4853 (倉田 有大 さん) に返信 > > SHGetSpecialFolderLocation じゃないとだめなんですか? > SHGetSpecialFolderPath とか、SHGetFolderPath とかではだめなのでしょうか? > > こちらなら、IMalloc はいらないですよね?ITEMIDLISTじゃないとだめという場合もあるので > 一概には言えませんが... > > で、実装ですが、IMalloc が必要なのなら、その都度確保ではなく、最初に確保したら > 以後ずっと使いまわしが基本です。もちろん STA でw > > ちなみに、COMオブジェクトを開放するのに IUnknown を引っ張る必要はありません。 > いらなくなった時点で > System.Runtime.InteropServices.Marshal.ReleaseComObject(alloc); > を呼び出すだけでOKです。 > > キャストした場合は、キャストしたオブジェクトごとに呼び出す必要があるはずです。 > .NET では原則として IUnknown を必要とする処理はいらないはずです。 > #もちろん、メソッドとしてのAddRef/Releaseも含め
どうもありがとうございます<__> SHGetSpecialFolderPath なんですが、使用してみたところ
[DllImport("coredll.dll", SetLastError = true)] public static extern bool SHGetSpecialFolderPath( int hwndOwner, string lpszPath, ShellSpecialFolder nFolder, bool fCreate);
coredllがないぞ〜 みたいなこといわれます。XP s2なのになあ。 なんか、インストールしないといけないのかな? shell32.dllにもないといわれるし、どこにあんねん;_;
>で、実装ですが、IMalloc が必要なのなら、その都度確保ではなく、最初に確保したら 以後ずっと使いまわしが基本です。もちろん STA でw
あら、そうだったんですか。 確保しまくっていたわたしはいったい^^;
WindowsAPI.SHGetSpecialFolderLocation(Handle, shellSpecialFolder, out idHandle); Marshal.FreeCoTaskMem(idHandle); とりあえず、今回はこれでいいのでしょうか?
|
|