C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 14 を表示中)
■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);
とりあえず、今回はこれでいいのでしょうか?

返信 編集キー/


管理者用

- Child Tree -