簡単: WinAPI 関数の結果 を明示的にマーシャリングするにはどうすればよいですか?
C# で WinApi 関数のパラメーターをマーシャリングする方法は知っていますが、戻り値もマーシャリングするにはどうすればよいですか? それとも、実際にそれらをマーシャリングする必要がありますか? 私は、WinAPI が(アンマネージ コードではハンドルも intである) のみ
BOOL
またはすべての型を返すことを理解しています。INT
// common signature
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static extern int GetFileAttributes([MarshalAs(UnmanagedType.LPStr)] string filename);
// my prefered signature because easy to handle the result
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static extern FileAttributes GetFileAttributes([MarshalAs(UnmanagedType.LPStr)] string filename);
FileAttributes
列挙型であり、各値は簡単にキャストできるため、int
この表記法で安全だと確信しています。しかし、パラメーターで行うように、この 1 つの署名で結果をマーシャリングできますか? 私は実際にはMarshal
クラスとMarshalAs
属性しか知りません。