Bit*_*lue 4 c# winapi marshalling
简单:如何明确封送WinAPi函数的结果?
BOOL或所有类型INT(句柄在非托管代码中也是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);
Run Code Online (Sandbox Code Playgroud)
因为FileAttributes是enum并且每个值都可以很容易地被投射到int我确定我用这种表示法是安全的.但是我可以像参与参数一样编组这个签名中的结果吗?我实际上只知道Marshal类和MarshalAs属性.
是的你可以.您只需要使用[return:]属性语法,例如:
[return: MarshalAs(UnmanagedType.LPStruct)]
Run Code Online (Sandbox Code Playgroud)
但在你的情况下,没有编组要做.转换整数类型不需要编组,因此只需使用示例中的第二种形式.
如果你真的想要,你可以写一个调用的公共方法,GetFileAttributes()它检查返回值的有效性.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |