察看一下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的,是如何实现的???
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的,是如何实现的???
解决方案 »
- 文件读写
- 求vs2008的一个压缩包,我用迅雷下载,只到99.8就停了,好像就差几个文件了,5兆左右,大家帮忙
- 同样的代码,访问dll和exe中的字符串常量却有不同效果!什么原因?
- 关于802.1x编程,请赐教
- 请问我想要通过在view里调用非模态对话框里面的函数来刷新dialog里的曲线。应该调用什么函数?
- 如何把CString 变量转换成OLECHAR * 的变量
- 发布软件一 ----------- 组件注册
- 打印机救急,请高手帮助
- VSFlexGrid某一列中添加图片C++编程
- GetClassInfo只能取出第一个注册的结构!如何取出第二个?
- 在线等:为什么点ok和cancel的结果会一样啊!
- 简单问题 在线等~~~
{
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);
}