The PIDL Manager

Before we continue, we really need to discuss pidlMgr.cls. This class is a helper class that we will use to manage functions involving PIDLs. These helper functions include things like creating, copying, and deleting PIDLs, getting the last PIDL in a list of PIDLs, getting the next PIDL in a list of PIDLs, as well as additional functions that are more specific to our particular namespace extension.

So add a new class to the project called pidlMgr.cls, and let’s start implementing some of the functionality of this class.

Delete

We have used three functions from this class so far: Delete, Copy, and Create. Delete is by far the easiest of the functions to implement. It just wraps a call to IMalloc::Free. Delete looks like this:

'pidlMgr.cls

Private m_  pMalloc As IMalloc

Private Sub Class_Initialize(  )
    Set m_  pMalloc = GetMalloc
End Sub

Private Sub Class_Terminate(  )
    Set m_  pMalloc = Nothing
End Sub

Public Sub Delete(ByVal pidl As LPITEMIDLIST)
    m_  pMalloc.Free pidl
End Sub

Copy

Copy is used to make a copy of the PIDL:

Public Function Copy(ByVal pidlSource As LPITEMIDLIST) As LPITEMIDLIST
    Dim pidlTarget As LPITEMIDLIST
    Dim cbSource As UINT
    
    Copy = 0
    
    If (pidlSource = 0) Then
        Exit Function
    End If
    
    cbSource = GetSize(pidlSource)
    
    pidlTarget = m_pMalloc.Alloc(cbSource)
    If (pidlTarget > 0) Then
        CopyMemory ByVal pidlTarget, ByVal pidlSource, cbSource
        Copy = pidlTarget
    End If
    
End Function

Create

This method is a little more involved, but the reason for this requires some background ...

Get VB Shell Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.