C# でメモリの合計値を取得したい場合、MSDN でシステムからデータを呼び出す kernel32 関数を見つけました。MSDN は次のように関数を宣言します。
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
しかし、これは正しく機能しません。「ref」を「[In, Out]」に変更すると、正しく動作します。C# の [In, Out] パラメータとは何ですか?