手机版

COM编程入门(17)

发布时间:2021-06-06   来源:未知    
字号:

COM编程入门,十分浅显易懂

会按顺序进行服务器的方法调用。 也就是说,一旦一个方法调用开始,所有其它试图调用方法的线程都将阻塞,直到第一个方法返回。COM库本身确保服务器一次不会被一个以上的线程闯入。

QueryInterface()

QueryInterface()简称QI(),由客户端程序调用这个函数从COM对象请求不同的接口。我们在例子代码中因为只实现一个接 口,QI()会很容易使用。QI()有两个参数:一个是所请求的接口IID,一个是指针的缓冲大小,如果查询成功,QI()将接口指针地址存储在这个缓冲 指针中。

HRESULT CUnknownImpl::QueryInterface ( REFIID riid, void** ppv ) {

HRESULT hrRet = S_OK;

// 标准QI()初始化 – 置 *ppv 为 NULL.

*ppv = NULL;

// 如果客户端请求提供的接口,给 *ppv.赋值

if ( IsEqualIID ( riid, IID_IUnknown ))

{

*ppv = (IUnknown*) this;

}

else

{

// 不提供客户端请求的接口

hrRet = E_NOINTERFACE;

}

// 如果返回一个接口指针。 调用AddRef()增加引用计数.

if ( S_OK == hrRet )

{

((IUnknown*) *ppv)->AddRef();

}

return hrRet;

}

在QI()中做了三件不同的事情:

1. 初始化传入的指针为NULL;

[*ppv = NULL;]

2. 检查riid,确定组件对象类(coclass)实现了客户端所请求接口;

3. [if ( IsEqualIID ( riid, IID_IUnknown ))];

COM编程入门(17).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)