最低限DllImportの使い方を理解している方を対象にしています。この記事をコピペで利用した際の責任は一切負いません
あの、C# で Windowsのファイルアイコンやら色々な情報を獲得する SHGetFileInfo の宣言を、DllImportからLibraryImportに書き換えて、憎きSYSLIB1054を一つ撲滅する方法をお伝えします。
まず、C# での DllImportのパターンは、よく見るのはこういう宣言ですね。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; [DllImport("shell32.dll", CharSet = CharSet.Unicode)] private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttribs, ref SHFILEINFO psfi, uint cbFileInfo, SHGFI uFlags); そして SHGETFILEINFO の使い方はこんな感じですよね?
SHFILEINFO shinfo = new(); IntPtr shFileInfoResult; // ここ shFileInfoResult = SHGetFileInfo(path, 0, ref shinfo, (uint)Marshal....