COM编程中QueryInterface
在网上看到关于QueryInterface实现的介绍,有些不懂。
HRESULT 实现类::QueryInterface( const IID& iid,void **ppv)
{
if( iid== IID_接口一)
*ppv=(j接口一*) this
else if( iid== IID_接口二)
*ppv=(j接口二*) this
//其他以此类推
}
QueryInterface中查询的时候,是将实现类的this指针强制转换成要查询的接口的类型,这个时候在内存中发生的操作是将this的内存块切割成要查询的接口的内存大下,然后将这块内存填入传入的void指针。这就获取了要查询的接口。因为实现类的内存中是包含了要查询的接口的内存结构,因此,上面的操作是可实现的。
原文网址是:http://blog.csdn.net/dotnet90/archive/2009/02/14/3890251.aspx
我不明白的是当一个实现类中有多个接口的时候,为什*ppv都等于this,强制转换可以改变它的值吗?