kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

C#のラムダをWin32呼び出しで使う

あたり前っちゃーあたり前なんですが、Win32を呼び出す際の選択肢として、なぜかラムダを使うという選択肢が思いつかなかった。

delegate Boolean EnumWindowProc(IntPtr hwnd, IntPtr lp);

[DllImport("User32.dll")]
private static extern Boolean EnumWindows(EnumWindowProc handler, IntPtr lparam);

public void Enum()
{
  int count = 0;
  EnumWindows(
    (hwnd, lp) =>
    {
      ++count;
      return true;
    }, IntPtr.Zero);

    Console.WriteLine(count);
}

処理内容が小さい場合はもちろん、呼び出し処理を完全にラップして抽象化する場合にも使える。コールバック関数がそこだけ必要ってケースも多いので利便性高い。