程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> COM智能指針的使用

COM智能指針的使用

編輯:關於C語言

用代碼說話

ComTest實現了兩個接口,ICmd和IStr,ICmd裡有一個函數--Add,IStr裡有一個函數--Cat,此處旨在說明智能指針的用法,故不列出,附件裡是工程代碼,COM組件就不給出源碼了

  1. #include <atlbase.h>  
  2. #include <atlcom.h>  
  3.  
  4. #if 0  
  5. #import "ComTest.tlb" no_namespace   //第三種方法用到此行 導入tlb類型庫 不使用名稱空間  
  6. #endif  
  7.  
  8. //以下二行為第一 二種方法使用  
  9. #include "ComTest_i.c"  
  10. #include "ComTest.h"  
  11.  
  12. #include <stdio.h>  
  13. #include <stdlib.h>  
  14.  
  15. using namespace ATL;  
  16.  
  17. int main()  
  18. {  
  19.     CoInitialize(NULL);  
  20. #if 0  
  21.     //第三種方法  
  22.     ICmdPtr cmd = NULL; //聲明一個ICmdPtr智能指針,並創建實例   同ADO使用比較相似  
  23.     cmd.CreateInstance(__uuidof(Cmd));  
  24.     int sum;  
  25.     cmd->Add(1,2,&sum);  
  26.     printf("%d\n" , sum);  
  27.     cmd.Release();//佛曰:不可少,不可少  
  28.  
  29.     //第一種方法  
  30.     CComPtr<IUnknown> pUnk;//定義智能指針  
  31.     CComQIPtr<ICmd> pCmd;  
  32.     HRESULT hr;  
  33.  
  34.     hr = pUnk.CoCreateInstance(CLSID_Cmd , NULL , CLSCTX_INPROC);//在指針的COM創建IUnknown實例,比較繞,理解就行了  
  35.     hr = pUnk.QueryInterface(&pCmd);//等同於創建ICmd的對象  
  36.     int sum;  
  37.     hr = pCmd->Add(1,2,&sum);  
  38.     printf("%d\n",sum);  
  39.     //切記要Release  
  40.     pUnk.Release();  
  41.     pCmd.Release();  
  42. #endif  
  43.     //第二種方法  
  44.     CComPtr<IUnknown> pUnk;  
  45.     pUnk.CoCreateInstance(CLSID_Cmd , NULL , CLSCTX_INPROC);//同第一種方法  
  46.     CComQIPtr<ICmd> pCmd=pUnk; //創建ICmd對象  
  47.     CComQIPtr<IStr> pStr=pUnk; //創建IStr對象  
  48.     int sum;  
  49.  
  50.     pCmd->Add(1,2,&sum);  
  51.     printf("%d\n",sum);  
  52.     CComBSTR bstr;  
  53.     pStr->Cat((BSTR)"d",(BSTR)"e",&bstr);  
  54.     printf("%S\n",bstr);  
  55.     //Release是不能少的  
  56.     pStr.Release();  
  57.     pCmd.Release();  
  58.     pUnk.Release();  
  59.  
  60.     CoUninitialize();  
  61.     system("pause");  
  62.     return EXIT_SUCCESS;  

 

本文出自 “Studoc” 博客,請務必保留此出處http://studoc.blog.51cto.com/1284909/282721

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved