COM进程外服务器实现 QueryInterface时,这样的代码为什么不行?

2006-7-14: COM进程外服务器实现 QueryInterface时,这样的代码为什么不行?

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

  .....

  if( riid == MYIID1 || riid== MYIID2 .... ) {   // MYIIDX 是该对象实现的接口

    *ppv= this; 1

  }

   .....

}

客户QueryInterface成功后却无法调用MYIIDX的方法。这样写才可以:

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

    ..... if( riid == MYIID1 ) {

          *ppv= (MY_IID1*) this;

   } else if( riid == MYIID2 ) {

        *ppv= (MY_IID2*) this;

  }

     .....

   (MY_IIDX*) this,这个转换到底起什么作用呢?我试了一下,如果不是COM,在一个程序内是没有什么作用的。

2006-7-14: COM进程外服务器实现 QueryInterface时,这样的代码为什么不行?

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

  .....

  if( riid == MYIID1 || riid== MYIID2 .... ) {   // MYIIDX 是该对象实现的接口

    *ppv= this; 1

  }

   .....

}

客户QueryInterface成功后却无法调用MYIIDX的方法。这样写才可以:

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

    ..... if( riid == MYIID1 ) {

          *ppv= (MY_IID1*) this;

   } else if( riid == MYIID2 ) {

        *ppv= (MY_IID2*) this;

  }

     .....

   (MY_IIDX*) this,这个转换到底起什么作用呢?我试了一下,如果不是COM,在一个程序内是没有什么作用的。

你可能感兴趣的:(COM进程外服务器实现 QueryInterface时,这样的代码为什么不行?)