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.clsPrivate m_ pMalloc As IMalloc Private Sub Class_Initialize( ) Set m_ pMalloc = GetMalloc End Sub Private Sub Class_Terminate( ) Set m_ pMalloc = Nothing End SubPublic Sub Delete(ByVal pidl As LPITEMIDLIST)m_ pMalloc.Free pidlEnd 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 FunctionCreate
This method is a little more involved, but the reason for this requires some background ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access