[DllImport("shell32",EntryPoint="SHGetFileInfoA", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
public static extern int SHGetFileInfoPidl(int pidl, int dwFileAttributes, ref SHFILEINFOBYTE psfib, int cbFileInfo, SHGFI_flags uFlags);
public const short MAX_PATH = 260;public struct SHFILEINFOBYTE // sfib
{
public int hIcon;
public int iIcon;
public int dwAttributes;
[VBFixedArray(MAX_PATH)]public byte[] szDisplayName;
[VBFixedArray(80)]public byte[] szTypeName;
public void Initialize()
{
szDisplayName = new byte[MAX_PATH + 1];
szTypeName = new byte[81];
}
}public static string GetDisplayNameFromPIDL(int pidl)
{
    string returnValue="";    SHFILEINFOBYTE sfib=new SHFILEINFOBYTE ();    int x=SHGetFileInfoPidl(pidl, 0, ref sfib, Strings.Len(sfib), SHGFI_flags.SHGFI_PIDL | SHGFI_flags.SHGFI_DISPLAYNAME);
    本句出错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。我估计可能是 sfib 结构体变量的调用问题,但不知错在哪里,谁有办法解决