精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用C++語言編寫COM組件

開發 后端
本文提供一個完全用C++實現的進程內(DLL)COM服務器,不要ATL或MFC提供任何支持。用這種方式編寫COM對象可以讓你深入地洞察到COM處理進程內服務器的方法以及COM是如何創建類工廠的。利用本文提供的這個簡單框架你可以實現很基本的COM組件,如外殼擴展(Shell Extensions)等。

本文提供一個完全用C++實現的進程內(DLL)COM服務器,不要ATL或MFC提供任何支持。用這種方式編寫COM對象可以讓你深入地洞察到COM處理進程內服務器的方法以及COM是如何創建類工廠的。利用本文提供的這個簡單框架你可以實現很基本的COM組件,如外殼擴展(Shell Extensions)等。

以下是用本文所說的方式編寫自己的COM對象要經過的步驟:

第一步:寫一個頭文件,這個頭文件包含以下內容:

1、 包含文件comdef.h:#include <comdef.h>。

2、 定義COM服務器的GUID。

 

  1. _declspec(selectany) GUID CLSID_Mine = { 0xdc186800,  
  2. 0x657f,  
  3. 0x11d4,   
  4. {0xb0, 0xb5, 0x0, 0x50, 0xba, 0xbf, 0xc9, 0x4}  
  5. }; 

 

3、 給出接口的IID以及這個接口要實現的方法定義。到時客戶端會用到這個接口的IID和接口的方法。

 

  1. interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904")) ImyInterface : public IUnknown  
  2. {  
  3. STDMETHOD(Square)(long *pVal)PURE;  
  4. STDMETHOD(Cube)(long *pVal)PURE;  
  5. }; 

 

客戶端使用此接口:

 

  1. HRESULT hr;  
  2. ImyInterface *pmine=(0);  
  3. hr = CoCreateInstance(CLSID_Mine, // COM 服務器的CLSID   
  4. NULL, //不支持聚合  
  5. CLSCTX_INPROC_SERVER, // 是個DLL   
  6. __uuidof(ImyInterface), // 接口的IID  
  7. (void**)&pmine   
  8. ); 

 

還有一種方法可以從注冊表中獲得COM對象的CLSID,就是調用CLSIDFromProgId()函數,不過必須把組件的ProgId傳遞給這個函數。

第二步:必須為所定義的接口提供實現,本文用的方法是創建一個從接口繼承的新類:

 

  1. // 這個類實現單接口ImyInterface ...  
  2. //   
  3. //   
  4. class CmyInterface : public CComBase<> ,   
  5. public InterfaceImpl<ImyInterface>   
  6. {  
  7. public:  
  8. CmyInterface();  
  9. virtual ~CmyInterface();  
  10. // 我們必須要為QueryInterface 編寫代碼  
  11. STDMETHOD(QueryInterface)(REFIID riid,LPVOID *ppv);  
  12. // ImyInterface 接口方法  
  13. STDMETHOD(Square)(long *pVal);  
  14. STDMETHOD(Cube)(long *pVal);  
  15. }; 

 

模版類InterfaceImpl<>提供接口引用計數的實現。在此我們可以用多接口繼承,那樣就能在一個COM組件中實現多個接口。

第三步:在完成這個對象之前,我們還要編寫Queryinterface和兩個接口方法:

 

  1. STDMETHODIMP CmyInterface::QueryInterface(REFIID riid,LPVOID *ppv)  
  2. {  
  3. *ppv = NULL;  
  4. if(IsEqualIID(riid,IID_IUnknown) || IsEqualIID(riid,__uuidof(ImyInterface)))  
  5. {  
  6. // 因為我們從ImyInterface繼承,所以要進行強制類型轉換  
  7. *ppv = (ImyInterface *) this;  
  8.  
  9. _AddRef(); // 這個方法從某個基類繼承而來  
  10. return S_OK;  
  11. }  
  12. return E_NOINTERFACE;  
  13. }  
  14.  
  15. STDMETHODIMP CmyInterface::Square(long *pVal)  
  16. {  
  17. long value = *pVal;  
  18. *pVal = value * value;  
  19. return S_OK;  
  20. }  
  21.  
  22. STDMETHODIMP CmyInterface::Cube(long *pVal)  
  23. {  
  24. long value = *pVal;  
  25. *pVal = value * value * value;  
  26. return S_OK;  

 

注意這里使用了__uuidof(ImyInterface)來獲取接口的IID,這是因為我們已經在第一步中將這個接口關聯到了某個uuid。

最后一步:COM 組件的DLLs必須輸出一個叫DllGetClassObject的函數。由這個函數為CmyInterface創建類工廠并返回一個對它的引用。然后我們調用CoCreateInstance為進程內COM創建類工廠,接著調用DllGetClassObject。這個類工廠有一個方法是CreateInstance,由這個方法創建對象并返回對它的引用。

 

  1. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)  
  2. {  
  3. *ppvOut = NULL;  
  4. if (IsEqualIID(rclsid, CLSID_Mine))  
  5. {  
  6. // 為CmyInterface類聲明類工廠  
  7. CClassFactory<CmyInterface>   
  8. *pcf = new CClassFactory<CmyInterface>;   
  9. return pcf->QueryInterface(riid,ppvOut);  
  10. }  
  11. return CLASS_E_CLASSNOTAVAILABLE;  

 

在此我們要檢查所請求的CLSID是不是CLSID_Mine,如果不是則返回一個錯誤代碼。

你可能會問在哪里創建實際的CmyInterface類對象,實際上這是由CClassFactory<CmyInterface>的模板實例來處理的。以下是CClassFatory的實現:

 

  1. // CSingleCreator 用于單實例類工廠,這個類為多個CreateObject請求返回相同的對象指針..   
  2. template<class comObj>  
  3. class CSingleCreator  
  4. {  
  5. protected:  
  6. CSingleCreator():m_pObj(0) {};  
  7. comObj *CreateObject()  
  8. {  
  9. if(!m_pObj)  
  10. {  
  11. m_pObj = new comObj;  
  12. }  
  13. return m_pObj;  
  14. }  
  15. comObj * m_pObj;  
  16. };  
  17. // CMultiCreator 用于常用類工廠,這個類為每一個CreateObject請求返回新的對象指針..  
  18. template<class comObj>  
  19. class CMultiCreator  
  20. {  
  21. protected:  
  22. CMultiCreator():m_pObj(0) {};  
  23. comObj *CreateObject()  
  24. {  
  25. return new comObj;  
  26. }  
  27. comObj * m_pObj;  
  28. };  
  29. //ClassFactory類實現  
  30. // MultiCreator是缺省的類工廠創建者  
  31. //這個類實現了接口IclasFactory......  
  32.  
  33. class CClassFactory : public CComBase<>,  
  34. public InterfaceImpl<IClassFactory>,  
  35. public creatorClass   
  36. {  
  37. public:  
  38. CClassFactory() {};  
  39. virtual ~CClassFactory() {};  
  40.  
  41. STDMETHOD(QueryInterface)(REFIID riid,LPVOID *ppv)  
  42. {  
  43. *ppv = NULL;  
  44. if(IsEqualIID(riid,IID_IUnknown) || IsEqualIID(riid,IID_IClassFactory))  
  45. {  
  46. *ppv = (IClassFactory *) this;  
  47. _AddRef();   
  48. return S_OK;  
  49. }  
  50. return E_NOINTERFACE;  
  51. }  
  52.  
  53. STDMETHODIMP CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)  
  54. {  
  55. *ppvObj = NULL;  
  56. if (pUnkOuter)  
  57. return CLASS_E_NOAGGREGATION;  
  58. m_pObj = CreateObject(); // m_pObj 在creatorClass中定義  
  59. if (!m_pObj)  
  60. return E_OUTOFMEMORY;  
  61. HRESULT hr = m_pObj->QueryInterface(riid, ppvObj);  
  62. if(hr != S_OK)  
  63. {  
  64. delete m_pObj;  
  65. }  
  66. return hr;  
  67. }  
  68. STDMETHODIMP LockServer(BOOL) { return S_OK; } // 未實現  
  69. }; 

 

COM調用CreateInstance創建請求的對象,參數riid指的是所請求的接口IID,如果這個對象支持這個接口,則增加它的引用計數并返回對自身的引用。

關于代碼:本文所提出的方法是如何用純粹的C++編寫COM組件的一個大概念。很多方面的細節都省略了。從本文的文字和代碼中可以看出用純C++編寫COM組件需要做些什么工作,如果你要用這種方法編寫COM組件的話,這些代碼只能是拋磚引玉,具體的實現可以在此基礎上往下做.

責任編輯:于鐵 來源: 互聯網
相關推薦

2009-08-05 16:54:02

VC6.0編寫調用COVS2005中C#編寫

2009-09-24 14:59:38

C#編寫COM組件

2009-07-03 10:33:07

C#創建COM組件

2010-01-12 14:16:31

Visual C++語

2009-08-19 14:35:12

C++和C#相互調用C

2009-08-20 11:03:34

Visual C#使用

2010-01-14 14:40:21

C++代碼

2025-01-06 08:28:45

C語言操作系統程序

2022-06-26 00:24:57

C語言操作系統語言

2009-09-02 16:43:55

C#調用Excel的C

2009-08-21 09:14:47

C# Excel CO

2010-12-30 16:11:10

Visual StudWindows部署VC++

2010-01-15 17:38:37

C++語言

2010-01-12 18:16:12

C++語言

2009-09-24 15:10:54

C#調用COM組件

2023-10-30 10:29:50

C++最小二乘法

2020-09-22 15:29:03

UnixC++C

2009-09-22 17:53:32

C# COM組件開發

2010-01-14 10:23:08

C++語言

2010-01-26 10:27:43

C++語言
點贊
收藏

51CTO技術棧公眾號

欧美丝袜一区| yellow字幕网在线| 激情深爱一区二区| 欧美精品久久久久久久久久| 黄色免费看视频| 户外露出一区二区三区| 一色屋精品亚洲香蕉网站| 国产二区一区| 国产女优在线播放| 狠狠色丁香久久综合频道| 亚洲欧美一区二区精品久久久| 亚洲人视频在线| 99在线视频影院| 国产精品久久久久婷婷二区次| 国产成人亚洲欧美| 一级黄色免费片| 99在线观看免费视频精品观看| 这里只有精品视频| 你懂得在线视频| 动漫一区二区三区| 91国产精品成人| 欧美视频在线观看视频| 免费在线观看av| 久久亚区不卡日本| 翡翠波斯猫1977年美国| 亚洲天堂狠狠干| 久久国产高清| 国内精品国产三级国产在线专| 很污很黄的网站| 亚洲动漫精品| 亚洲精品成人久久久| 亚洲男人天堂av在线| 欧亚一区二区| 日韩欧美在线播放| 九色自拍视频在线观看| 91三级在线| 中文字幕一区二区5566日韩| 欧洲亚洲一区二区| 婷婷视频在线观看| 成人美女在线视频| 亚洲一区二区在线播放| 一级特黄aaaaaa大片| 久久综合网络一区二区| 欧美在线视频一区| 日韩三级视频在线| av成人天堂| 亚洲**2019国产| 国产在线综合网| 午夜视频一区| 欧美国产激情18| 久久久精品人妻一区二区三区四| 外国成人激情视频| 久久视频在线直播| 日韩三级在线观看视频| 午夜影院欧美| 欧美成人午夜免费视在线看片 | 日韩精品1区2区| 亚洲午夜激情在线| 欧美激情在线视频二区| 国产一级在线视频| 亚洲精品女人| 91福利视频网| 免费看污视频的网站| 日韩精品视频网站| 国产精品午夜一区二区欲梦| 亚洲一区中文字幕在线| 激情小说亚洲一区| 99视频日韩| 四虎国产精品永远| 国产婷婷精品av在线| 亚洲视频sss| 国产1区在线| 亚洲国产一区在线观看| 国产91美女视频| 亚洲成人激情社区| 欧美日韩免费视频| 无套白嫩进入乌克兰美女| 最新国产一区二区| 精品亚洲精品福利线在观看| 亚洲成人黄色av| 无需播放器亚洲| 久久青草精品视频免费观看| 九九精品免费视频| 久久国产尿小便嘘嘘| 97碰碰视频| 邻居大乳一区二区三区| 中文字幕在线一区| 黄网站欧美内射| 在线成人视屏| 日韩精品在线一区| 国产jjizz一区二区三区视频| 999精品一区| 欧美激情a∨在线视频播放| 国产99久久久| 国内精品国产成人| 久久综合九色欧美狠狠| 黄色免费网站在线观看| 午夜精品国产更新| 玖玖爱视频在线| 国产伦精品一区二区三区在线播放| 亚洲欧洲中文天堂| 久草视频在线资源站| 日日夜夜免费精品| 99精彩视频在线观看免费| 男人的天堂在线视频| 亚洲欧美日韩中文播放| 日本在线观看a| 午夜视频在线观看精品中文| 伊人激情综合网| 国产午夜精品无码| 精品一区二区三区av| 麻豆精品视频| 日本成人不卡| 欧美日本一区二区三区| 中文字幕高清视频| 亚洲国产午夜| 亚洲一区制服诱惑| av天在线观看| 日韩欧美成人网| 国产伦精品一区二区三区88av| 成人情趣视频网站| 欧美一区第一页| 丰满少妇被猛烈进入| 中文字幕一区二区三区不卡| 88av.com| 先锋影音国产精品| 97精品在线观看| 国产18精品乱码免费看| 尤物视频一区二区| 日本超碰在线观看| 日韩精品dvd| 国产精品成人v| 女人天堂在线| 福利视频导航一区| 喷水视频在线观看| 亚洲高清自拍| 高清国产一区| 免费不卡av| 精品日韩一区二区| 妺妺窝人体色www婷婷| 国产中文字幕一区| 中国 免费 av| 国产一区二区三区免费观看在线| 中日韩午夜理伦电影免费| 国产91国语对白在线| 2021久久国产精品不只是精品| 免费国产黄色网址| 小嫩嫩12欧美| 日韩美女免费视频| 黄色小视频在线观看| 色域天天综合网| 免费网站在线高清观看| 三级欧美韩日大片在线看| 欧美尤物一区| 播放一区二区| 尤物九九久久国产精品的特点| 日本黄色一级视频| 国产欧美视频一区二区| 三上悠亚在线一区二区| 99久久婷婷| 97久久精品午夜一区二区| 国产经典三级在线| 日韩大片在线观看视频| 中文在线第一页| 欧美激情一区在线观看| 免费成人黄色大片| 亚洲五月婷婷| 欧美另类一区| 国产原创一区| 欧美成人精品激情在线观看| 高清国产mv在线观看| 天天影视涩香欲综合网| 亚洲第一香蕉网| 蜜臀久久久久久久| 日韩精品手机在线观看| 精品一区二区男人吃奶| 国产精品久久久久99| 国产在线看片| 亚洲精品99999| 午夜精品一区二| 亚洲图片激情小说| 国产精品无码毛片| 久久国内精品自在自线400部| 免费极品av一视觉盛宴| 日韩成人一级| 成人av.网址在线网站| av人人综合网| 中文字幕亚洲精品乱码| 欧美在线视频一区二区| 欧美成人性生活视频| 精品999在线播放| 国产又粗又猛又爽又| 亚洲激情男女视频| 天堂久久精品忘忧草| 国模无码大尺度一区二区三区| 日韩 欧美 视频| 色婷婷亚洲mv天堂mv在影片| 国产精品xxxx| 日韩免费大片| 欧洲成人在线观看| 欧美日韩在线视频免费观看| 国产午夜一区二区| 国产综合在线播放| 欧美群妇大交群中文字幕| 欧美一级片免费在线观看| 最新国产の精品合集bt伙计| 日韩av一二区| 成人一级片在线观看| 性chinese极品按摩| 国产伦理一区| 日韩小视频网站| 欧美mv日韩| 欧美日韩综合久久| 91久久精品无嫩草影院| 国产精品午夜一区二区欲梦| 夜鲁夜鲁夜鲁视频在线播放| 欧美日本黄视频| 日本不卡不卡| 一本色道久久综合狠狠躁篇的优点 | 久久午夜精品| 亚洲国产精品成人天堂| 亚洲女同中文字幕| 日韩久久久久久久| 青青草原在线亚洲| 国产精品一区二区免费| 精品一区二区三区四区五区| 国产精品一区av| 日韩三区免费| 欧美一级大片视频| 白浆在线视频| 97精品免费视频| av资源在线| 97高清免费视频| 欧洲一区二区三区| 久久99亚洲热视| 怡红院av在线| 免费av一区二区| av网站导航在线观看免费| 久久精品91久久香蕉加勒比| av女优在线| 中文字幕日韩精品有码视频| 国产三级视频在线看| 日韩欧美二区| 丁香五月网久久综合| 色悠久久久久综合先锋影音下载| 成人亚洲欧美一区二区三区| 日韩av黄色| 91最新在线免费观看| 国产精品高清一区二区| 亚洲一区二区久久久久久| 欧美经典影片视频网站| 爱情岛论坛亚洲入口| 韩国精品福利一区二区三区| 国内一区二区三区在线视频| 日韩有码中文字幕在线| 欧美日韩国产不卡在线看| 国产精品一线天粉嫩av| 亚洲国产精品毛片| 99国产**精品****| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 性欧美video高清bbw| 欧美高清无遮挡| 高清毛片在线观看| 日韩av免费在线| 欧美亚洲综合视频| 亚洲xxx自由成熟| 国产一区二区在线视频你懂的| 国产视频精品网| 久久不见久久见中文字幕免费| 色播亚洲视频在线观看| 亚洲精品在线观看91| 青草青青在线视频| 久久久蜜桃一区二区人| www.污污视频| 不卡视频一二三| 山东少妇露脸刺激对白在线| 亚洲欧美国产三级| 影音先锋亚洲天堂| 欧美三级韩国三级日本一级| h片在线免费看| 日韩精品久久久久久福利| av免费观看一区二区| 色综合男人天堂| 久久久一本精品| 91亚色免费| 国产成人精品免费视| 穿情趣内衣被c到高潮视频| 国产精品五区| а 天堂 在线| 久久夜色精品国产噜噜av | 香蕉视频黄在线观看| 中文字幕精品一区二区精品| 欧美韩日亚洲| 国产欧美欧洲在线观看| 精品欧美午夜寂寞影院| 一级二级三级欧美| 香蕉人妻av久久久久天天| 日韩色在线观看| 国产毛片av在线| 欧美激情国产日韩精品一区18| 中文在线免费视频| 91在线网站视频| 九九亚洲视频| 国产毛片久久久久久国产毛片| 日韩和的一区二区| 免费不卡的av| 最好看的中文字幕久久| 日韩欧美国产另类| 亚洲国产精品va在线看黑人| 国产一二三区在线观看| 日韩av电影中文字幕| 波多野结衣欧美| 四虎4hu永久免费入口| 久久精品国产第一区二区三区| 中文字幕日韩三级片| 亚洲在线观看免费| 国产精品污视频| 最新日韩中文字幕| 成人做爰视频www网站小优视频| 粉嫩高清一区二区三区精品视频| 亚洲国产精品91| 男人的天堂最新网址| 中文字幕欧美日本乱码一线二线| 国产成人精品一区二三区| 欧美v日韩v国产v| 成人在线观看免费网站| 国产欧亚日韩视频| 成人嘿咻视频免费看| 日韩欧美xxxx| 久久夜色精品一区| 国产视频1区2区| 国产视频综合在线| 欧美aa在线观看| 精品一区二区国产| 日韩午夜在线电影| 久久久久成人精品无码中文字幕| 亚洲影院免费观看| 亚洲av无码一区二区乱子伦| 九九久久精品一区| 亚洲成人影音| 久久综合久久久久| 丰满白嫩尤物一区二区| 久久精品www人人爽人人| 欧美α欧美αv大片| 欧美巨大xxxx做受沙滩| 99精品国产高清一区二区| 国产精品第十页| 日本精品一二三| 午夜精品免费在线| 香蕉av一区二区三区| 热久久免费视频精品| 狠狠综合久久av一区二区蜜桃 | 欧美成a人片在线观看久| 中文字幕综合网| 成年人免费看毛片| 日韩av有码在线| 69久成人做爰电影| 色综合久久av| 久久国产精品露脸对白| 国产午夜手机精彩视频| 欧美白人最猛性xxxxx69交| 97人人爽人人澡人人精品| 精品免费二区三区三区高中清不卡 | 国产一级精品毛片| 最好看的2019年中文视频| 91成人app| 蜜臀av色欲a片无码精品一区| 91亚洲精品久久久蜜桃网站| 国产精品无码粉嫩小泬| 日韩最新免费不卡| 1204国产成人精品视频| 亚洲中文字幕无码中文字| 国产精品视频免费看| 国产aⅴ一区二区三区| 69av成年福利视频| 日韩成人精品一区| 九色91porny| 一本久久a久久精品亚洲| 天堂中文а√在线| 国产精品99久久久久久久| 久热re这里精品视频在线6| 麻豆网址在线观看| 日韩电影中文字幕av| 欧美成人毛片| 被灌满精子的波多野结衣| 日本一区二区动态图| 黑人精品一区二区| 国产精品一香蕉国产线看观看| 黄色亚洲精品| 在线视频这里只有精品| 亚洲аv电影天堂网| 成人在线观看免费视频| 被灌满精子的波多野结衣| 国产精品久久久99| 午夜影院免费视频| 亚洲自拍偷拍在线| 秋霞电影网一区二区| 91av在线免费视频| 久久久精品免费| 国产免费av一区二区三区|