STRRET

C# Definition:

[StructLayout(LayoutKind.Explicit, Size=264)]
public struct STRRET
{
     [FieldOffset(0)]
     public UInt32 uType;    // One of the STRRET_* values

     [FieldOffset(4)]
     public IntPtr pOleStr;    // must be freed by caller of GetDisplayNameOf

     [FieldOffset(4)]
     public IntPtr pStr;        // NOT USED

     [FieldOffset(4)]
     public UInt32 uOffset;    // Offset into SHITEMID

     [FieldOffset(4)]
     public IntPtr cStr;        // Buffer to fill in (ANSI)
}

VB Definition:

<StructLayout(LayoutKind.Explicit, Size=264)> _
     Public Structure STRRET
     <FieldOffset(0)> Public uType As UInt32     'One of the STRRET_* values
     <FieldOffset(4)> Public pOleStr As IntPtr   'must be freed by caller of GetDisplayNameOf
     <FieldOffset(4)> Public pStr As IntPtr      'NOT USED
     <FieldOffset(4)> Public uOffset As UInt32   'Offset into SHITEMID
     <FieldOffset(4)> Public cString As IntPtr   'Buffer to fill in (ANSI)
     End Structure

Notes:

Example:
// Structure used to return the display name to
STRRET pDisplayName;
String DisplayName;
SHFILEINFO m_shfi = new SHFILEINFO();

// Request the string as a char although Windows will likely ignore
// the request.
pDisplayName.uType = (uint)STRRET_TYPE.STRRET_CSTR;

// Get the "normal" display name.
iShellFolder.GetDisplayNameOf(pidlItems[0], SHGNO.SHGDN_NORMAL, 
         out pDisplayName);
System.Text.StringBuilder sbDisplayName = new System.Text.StringBuilder(256);
// Get the display name from the STRRET structure
WindowsAPI.StrRetToBuf(ref pDisplayName, pidlItems[0], 
        sbDisplayName, (uint)sbDisplayName.Capacity);
DisplayName = sbDisplayName.ToString();

Última actualización