gpt4 book ai didi

c# - 如何编码 WinApi 函数的返回值?

转载 作者:太空狗 更新时间:2023-10-30 01:05:40 25 4
gpt4 key购买 nike

简单:如何显式编码 WinAPI 函数的结果?


我知道如何在 C# 中编码 WinApi 函数的参数,但我还如何编码返回值?或者我真的必须编码他们吗?我了解 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);

由于 FileAttributes 是枚举并且每个值都可以很容易地转换为 int 我确信我对这个表示法是安全的。但是我可以像处理参数一样将结果编码到这个签名中吗?我实际上只知道 Marshal 类和 MarshalAs 属性。

最佳答案

是的,你可以。您只需要使用 [return:] 属性语法,例如:

[return: MarshalAs(UnmanagedType.LPStruct)]

但在您的情况下,无需编码。像那样转换整数类型不需要编码,因此只需在您的示例中使用第二种形式。

如果您确实需要,您可以编写一个名为 GetFileAttributes() 的公共(public)方法来检查返回值的有效性。

关于c# - 如何编码 WinApi 函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17879121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com