Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than Structures, prefix the name with the module name and a period.
STRRET (Structures)
.
The example given previously was incorrect - the cStr member should be an array of MAX_PATH (260) bytes, not a single IntPtr. I've added the Size=260 parameter to the StructLayout attribute to make this work. I know this is right in C#, have no idea about VB.
C# Definition:
[StructLayout(LayoutKind.Explicit, Size=260)]
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=260)> _
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
User-Defined Field Types:
None.
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();
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.
1/13/2008 4:00:13 AM - Damon Carr-72.43.165.29
Please edit this page!
Do you have...
helpful tips?
corrections to the existing content?
alternate definitions?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.