专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 编程

com入门小事例!理解com中的QueryInterface

发布时间:2011-07-01 07:31:22 文章来源:www.iduyao.cn 采编人员:星星草
com入门小例子!理解com中的QueryInterface

// testdll继承.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "String.h"

typedef char* String1;


class IMyUnknown
{
 public :
 static int IID_IUnknown;
public:
 virtual int       QueryInterface(const int &iid, void **ppv)=0;
 virtual int    AddRef()=0;
 virtual int    Release()=0;
};

 

 

class IDictionary : public IMyUnknown
{
 public :
    static int IID_Dictionary;
public :   
 virtual int LookupWord(String1, String1)=0;

};

 


class ISpellCheck : public IMyUnknown
{
 public :
 static int  IID_SpellCheck;
public :
 virtual int CheckWord(String1, String1)=0;
};

 

class CDictionary : public IDictionary ,  public ISpellCheck
{
public :
 CDictionary();
 ~CDictionary();
public :
 // IUnknown member function
 int  QueryInterface(const int &iid, void **ppv) ;
 int  AddRef() ;
 int  Release() ;

 // IDictionary member function

 int  LookupWord(String1, String1);


 // ISpellCheck member function
 int  CheckWord (String1, String1);
public :
 static int IID;
private :

 
 int  m_Ref ;

};

CDictionary::CDictionary()
{
 m_Ref = 0;

}

CDictionary::~CDictionary()
{

}

int  CDictionary::QueryInterface(const int &iid, void **ppv)
{
 if ( iid == IID_IUnknown )
 {
  *ppv = (IDictionary *) this ;
  ((IDictionary *)(*ppv))->AddRef() ;
 } else if ( iid == IID_Dictionary )
 {
  *ppv = (IDictionary *) this ;
  ((IDictionary *)(*ppv))->AddRef() ;
 } else if ( iid == IID_SpellCheck )
 {
  *ppv = (ISpellCheck *) this ;
  ((ISpellCheck *)(*ppv))->AddRef() ;
 }
 else
 {
  *ppv = NULL;
  return 0 ;
 }
 return 1;
}

int   CDictionary::AddRef()
{
 m_Ref ++;
 return  (int) m_Ref;
}

 

int   CDictionary::Release()
{
 m_Ref --;
 if (m_Ref == 0 ) {
  delete this;
  return 0;
 }
 return  (int) m_Ref;
}
int CDictionary::LookupWord(String1 word, String1 resultWord)
{
 
 strcpy(resultWord,word);

 return 1;

}

 

int CDictionary::CheckWord (String1 word, String1 resultWord)
{
 char *pWord =word;
 resultWord = strlwr(pWord);
 delete pWord;
 return 1;
}

 

int IMyUnknown::IID_IUnknown=1;
int IDictionary::IID_Dictionary=2;
int ISpellCheck::IID_SpellCheck=3;
int CDictionary::IID=4;

int _tmain(int argc, _TCHAR* argv[])
{
 
 
 IMyUnknown *pMyUnknown;
 IDictionary *pDictionary;
 ISpellCheck *pSpellCheck;
 char String1Result[50];

 

 CDictionary *pObject=new CDictionary();

 pObject->QueryInterface(IMyUnknown.IID_IUnknown,(void **)&pMyUnknown);

 pMyUnknown->QueryInterface(IDictionary.IID_Dictionary,(void **)&pDictionary);
 

 pDictionary->LookupWord("tiger", String1Result);
 printf("%s",String1Result);

 pDictionary->Release();
 pMyUnknown->Release();
}

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: