browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

queryinterface_cast

Posted by on 2008 年 04 月 10 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

一个小伎俩,仿写了ATL的com_cast宏。一方面是这阵子优化代码的产物,另一方面是好久没写东西了,止凑数耳。

C++代码
  1. template <typename T>   
  2. T* queryinterface_cast(__in IUnknown *pUnk)   
  3. {   
  4.     T *p = NULL;   
  5.     if (SUCCEEDED(pUnk->QueryInterface(__uuidof(T), (LPVOID*)&p)))   
  6.         return p;   
  7.     else  
  8.         return NULL;   
  9. }  

使用示例:

C++代码
  1. IShellLink *pLink = NULL;   
  2. CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,   
  3.     IID_IShellLink, (LPVOID*)&pLink);   
  4.   
  5. IPersistFile *pFile = queryinterface_cast<IPersistFile>(pLink);   
  6. if (NULL != pFile)   
  7. {   
  8.     // …   
  9.     pFile->Release();   
  10. }   
  11.   
  12. pLink->Release();  

订阅本站

没有评论

(Required)
(Required, will not be published)