这段代码:
[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 Platform SDK文档以获取帮助,确定应使用哪种数据类型代替'int'。
我应该怎么做?我尝试过"查阅MSDN",但我甚至不确定问题是什么意思。
我也在同一行收到以下内容:
CA1060 将P/Invoke移动到NativeMethods类
由于它是一个P/Invoke方法,'IconUtil.SHGetFileInfo(string, uint, out IconUtil.SHFILEINFO, uint, uint)'应该在名为NativeMethods、SafeNativeMethods或UnsafeNativeMethods的类中定义。
SHGetFileInfo
声明为返回int
。SHGetFileInfo
的返回值是int
吗?根据 MSDN,它不是。在 x86 上,这足够接近。但在 x64 上,不是这样的。这就是第一条消息的意思。 - user743382IconUtil
的类中,但应将其放置在名为NativeMethods
、SafeNativeMethods
或UnsafeNativeMethods
的类中。请查看MSDN以找出应使用哪个类。 - dtb