关于shell namespace下的itemidlist的实现问题??

cmdn 2004-11-20 10:45:50
察看一下itemidlist这个结构体,她的定义如下:
typedef struct _ITEMIDLIST {
SHITEMID mkid;
} ITEMIDLIST;
其中的shitemid又是另外一个结构体:
typedef struct _SHITEMID {
USHORT cb;
BYTE abID[1];
} SHITEMID, * LPSHITEMID;
_SHITEMID 利用了struct的Unsized Arrays。使得abid可以相当于指向一个字符串。但是我就想不通为什么_ITEMIDLIST 经过系统后,可以相当于一个list(This structure is an ordered sequence of one or more item IDs, terminated by a two-byte NULL),我想知道的是:本来只是含有一个SHITEMID的他,是如何变成含有许多个SHITEMID的,是如何实现的???
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
GGL123 2004-11-21
  • 打赏
  • 举报
回复
up
天限天空 2004-11-21
  • 打赏
  • 举报
回复
void Concatenate(LPCITEMIDLIST pidl2)
{
if( (m_pidl == NULL) && (pidl2 == NULL) ) return;
if( m_pidl == NULL ) {
m_pidl = PidlCopy(pidl2);
return;
}
if( pidl2 == NULL ) return;
DWORD cb1, cb2;
cb1 = GetByteSize() - sizeof(USHORT);
cb2 = PidlGetByteSize(pidl2);
LPITEMIDLIST pidlNew = (LPITEMIDLIST) _Module.m_Allocator.Alloc(cb1 + cb2);
if( pidlNew != NULL ) {
::CopyMemory(pidlNew, m_pidl, cb1);
::CopyMemory( ((LPBYTE)pidlNew) + cb1, pidl2, cb2 );
}
Attach(pidlNew);
}

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧