荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店