荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Deny (冬天来咯), 信区: Program
标 题: 其他
发信站: 荔园晨风BBS站 (Thu Nov 15 20:12:46 2001), 转信
十、COM_INTERFACE_ENTRY_IID(iid, x)
#define COM_INTERFACE_ENTRY_IID(iid, x)\
{&iid,\
offsetofclass(x, _ComMapClass),\
_ATL_SIMPLEMAPENTRY},
十一、COM_INTERFACE_ENTRY2_IID(iid, x, x2)
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)\
{&iid,\
(DWORD)((x*)(x2*)((_ComMapClass*)8))-8,\
_ATL_SIMPLEMAPENTRY},
从定义上看这两个宏与COM_INTERFACE_ENTRY()和COM_INTERFACE_ENTRY2()相比,
都只是
多了一项"iid"。没有别的好处,只不过由用户明确指出接口IID,而不用系统根据
接口
名字去转换了。
十二、COM_INTERFACE_ENTRY_FUNC( iid, dw, func )
#define COM_INTERFACE_ENTRY_FUNC(iid, dw, func)\
{&iid, \
dw, \
func},
还记得AtlInternalQueryInterface()中的代码吗?如果在接口映射表中找到了我
们
要找的接口,并且这个接口不是_ATL_SIMPLEENTRY型的,则执行宏定义中的指定的
函数。
这个宏就给我们提供了自己编写处理函数的功能。这个函数必须是如下定义:
HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
当AtlInternalQueryInterface调用func时,会传进相关的信息。pv是类对象的指针
,riid
是要查询的接口,ppv是要返回查询得到的接口指针,dw是在宏定义中指定的参数
。
另外如果函数中不打算返回接口指针,则应把ppv赋为NULL,并返回S_FALSE或
E_NOINTERFACE。返回S_FALSE刚会继续查找下去,若返回E_NOINTERFACE则会终止
查询。
若返回接口指针,则应返回S_OK.
十三、COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)
#define COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)\
{NULL, \
dw, \
func},
至于_BLIND类型的特点可以看前面几节。
十四、COM_INTERFACE_ENTRY_NOINTERFACE(x)
#define COM_INTERFACE_ENTRY_NOINTERFACE(x)\
{&_ATL_IIDOF(x), \
NULL, \
_NoInterface},
_NoInterface是CComObjectRootBase的成员函数,看看它的定义:
static HRESULT WINAPI _NoInterface(...)
{
return E_NOINTERFACE;
}
原来它只是返回E_NOINTERFACE,并且将终止查询。
哈哈,看来是不想让别人查到这个接口啊!!!
十五、COM_INTERFACE_ENTRY_BREAK(x)
#define COM_INTERFACE_ENTRY_BREAK(x)\
{&_ATL_IIDOF(x), \
NULL, \
_Break},
_Break也是CComObjectRootBase的成员函数,看看它的定义:
static HRESULT WINAPI _Break(...)
{
iid;
_ATLDUMPIID(iid, _T("Break due to QI for interface "), S_OK);
DebugBreak();
return S_FALSE;
}
如果查到这个接口将调用DebugBreak(),并返回S_FALSE,继续查询下去。
DebugBreak()是什么效果大家自己试试吧,一定很熟悉的,呵呵。
至此全部十五个接口映射宏我们都已经讲完了,唉,真是不容易,特别是前面几个
宏跟
踪起来很麻烦。因为文本方式的限制,所以很多东西不容易表达清楚。有些叫法也
是我
自己这么叫的,可能与别人的习惯不同。没办法,大家将就将就了,呵呵。
╭ ︻ ─ ︻ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ︻ ─ ︻ ╮
├ 海 ─ 天 ▁▁▉▁▁ ▁▁ ▄ ● 但 ─ 千 ┤
├ 上 ─ 涯 ▉ ▉ █ ▂▊▂ █ ﹀︿︿﹀︿﹀︿﹀︿ 愿 ─ 里 ┤
├ 升 ─ 共 ▉▁▉▁█ ▊ ★█★ ≈ ● 人 ─ 共 ┤
├ 明 ─ 此 ▉ ●▊● █ ≈ 长 ─ 婵 ┤
├ 月 ─ 时 ▉ ▊ ◢◤◣ ˙ ˙ ˙ 久 ─ 娟 ┤
╰ ︼ ─ ︼ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ︼ ─ ︼ ╯
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.201]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店