这段代码:
[DllImport("shell32", CharSet=CharSet.Unicode)]
private static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, uint flags);
导致以下代码分析问题:
CA1901 P/Invoke 声明应该是可移植的
正如您在代码中声明的那样,P/Invoke 'IconUtil.SHGetFileInfo(string, uint, out IconUtil.SHFILEINFO, uint, uint)' 的返回类型在 64 位平台上将是 4 字节宽。这是不正确的,因为此 API 的实际本机声明表明它在 64 位平台上应该是 8 字节宽。请参阅 MSDN 平台 SDK 文档以帮助确定应使用什么数据类型而不是“int”。
我应该做些什么?我试过“咨询 MSDN”,但我不确定这个问题是什么意思。
我也为同一行得到这个:
CA1060 将 P/Invokes 移至 NativeMethods 类
因为它是一个 P/Invoke 方法,所以应该在名为 NativeMethods、SafeNativeMethods 或 UnsafeNativeMethods 的类中定义“IconUtil.SHGetFileInfo(string, uint, out IconUtil.SHFILEINFO, uint, uint)”。