国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C++ > 正文

C++ COM編程之什么是接口?

2020-05-23 14:21:11
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++ COM編程之什么是接口?在C++中,可以使用抽象基類來實現COM接口,需要的朋友可以參考下
 
 

什么是接口?

說到COM,就不得不說接口了;在進行COM開發的過程中,可以說,我一直都在和各種各樣的接口打交道。那接口是什么?對于COM來說,接口是一個包含一個函數指針數組的內存結構,每一個數組元素包含的是一個由組件所實現的函數的地址;所以,對于COM,接口就是這樣的一個內存結構,其它東西都是一些COM并不關心的實現細節。

在C++中,可以使用抽象基類來實現COM接口。由于一個COM組件可以支持任意數目的接口,因此對于組件,可以使用抽象基類的多重繼承來實現它。

接口的好處

接口提供了兩個不同對象間的一種連接。對于客戶來說,一個組件就是一個接口集。客戶只能通過接口才能同COM組件打交道。而整體上來講,客戶對于一個組件可以說是知之甚少;甚至在某些時候,客戶甚至不必知道一個組件所提供的所有接口,就像你進行Windows  Shell開發時,對于一個它提供的組件,很多時候,你不可能知道所有的接口的。對于一個應用程序而言,接口是最重要的。組件本身只不過是接口的實現細節。

在實際開發時,你并不需要去理會組件的實現細節,你面對的是接口,面對接口工作。即使組件的開發者將組件的實現替換掉了,而接口不變,你的程序也不需要變動。接口,就像一個標準一樣,讓我們去遵從這個標準。之前做的一個項目就是替換一個組件的實現層,而對于接口,則不需要進行變更。

簡單的實現

通過一個簡單的例子來理解接口:

 

復制代碼代碼如下:

/*
** FileName     : SimpleInterfaceDemo
** Author       : Jelly Young
** Date         : 2013/12/11
** Description  : More information, please go to http://www.56wlw.com
*/
#include <iostream>
#include <combaseapi.h>
using namespace std;
interface IExample1
{
     virtual void __stdcall Fx1() = 0;
     virtual void __stdcall Fx2() = 0;
};
interface IExample2
{
     virtual void __stdcall Fy1() = 0;
     virtual void __stdcall Fy2() = 0;
};
// Implementation
class CImplementation : public IExample1, public IExample2
{
public:
     // Implementation IExample1
     void __stdcall Fx1() { cout<<"CImplementation::Fx1"<<endl; }
     void __stdcall Fx2() { cout<<"CImplementation::Fx2"<<endl; }
     // Implementation IExample2
     void __stdcall Fy1() { cout<<"CImplementation::Fy1"<<endl; }
     void __stdcall Fy2() { cout<<"CImplementation::Fy2"<<endl; }
};
// Client
int main()
{
     cout<<"Create an instance of the component."<<endl;
     CImplementation *pCImplementation = new CImplementation;
     // Get the IExample1 pointer
     IExample1 *pIExample1 = pCImplementation;
     // Use the IExample1 interface
     pIExample1->Fx1();
     pIExample1->Fx2();
     // Get the IExample2 pointer
     IExample2 *pIExample2 = pCImplementation;
     // Use the IExample2 pointer
     // Use the IExample2 interface
     pIExample2->Fy1();
     pIExample2->Fy2();
     // Destroy the component
     if (pCImplementation != NULL)
     {
          delete pCImplementation;
          pCImplementation = NULL;
          pIExample1 = NULL;
          pIExample2 = NULL;
     }
}

 

上面的例子中,client通過兩個接口pIExample1和pIExample2來和組件進行通信。在聲明接口時,使用了兩個純抽象基類IX和IY。總結上面代碼的關鍵之處在于:

1.COM接口在C++中是用純抽象基類實現的;
2.一個COM組件可以提供多個接口;
3.一個C++類可以使用多繼承來實現一個可以提供多個接口的組件。

細節剖析

interface這貨是從哪里來的?你會很好奇,是不是好奇的連下巴都掉下來了?C++也有interface關鍵字?不錯,這個關鍵字是在combaseapi.h頭文件中定義的,定義如下:

復制代碼代碼如下:

#define __STRUCT__ struct
#define interface __STRUCT__

 

說白了,就是用C++的關鍵字struct定義的一個結構體。使用struct定義有什么好處呢?首先需要搞清楚struct和class的區別。學了Java和C#的都知道,由于接口中定義的都是允許客戶調用的,所以在接口中就不需要private和protected的了,如果使用class,而必須還要使用public關鍵字強調接口的公有屬性,而struct默認的都是公有屬性,這樣就省去了添加public關鍵字的麻煩。

__stdcall是什么?__stdcall是一種用來修飾函數的關鍵字,主要約定了兩件事情:

1.參數傳遞順序,__stdcall表示參數從右向左壓入堆棧;
2.調用堆棧由誰(調用函數或被調用函數)清理,__stdcall表示由被調用函數修改堆棧。

接口是由純虛函數實現的,為什么是要這樣?以及展現出來的多態,這個說來話長,我將在下一篇博文中進行總結。

總結

在這里對接口基礎知識進行了掃盲式的總結,而這些簡單的知識點也是日后開發中會經常遇到的,這里把這些東西掌握好了,等日后開發時也會感到很輕松。希望大家能從這篇博文中學到一定的知識,同時也希望大家對我的博客提一些中肯的建議。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产天堂av| 国产免费自拍视频| 2018狠狠干| 国产激情视频一区二区| 18激情网站| 免费在线播放av| 国产乱妇乱子在线播视频播放网站| 狂野欧美性猛交xxxx乱大交| 激情小说 在线视频| 国产福利免费观看| 热99re久久精品精品免费| 日本韩国精品一区二区| 九色视频网站| 99在线免费观看| 福利视频在线导航| av大片在线播放| 中文字幕在线看精品乱码| 精品美女调教视频| 老师我好爽再深一点的视频| 国产一区二区三区不卡免费观看| 一本久中文高清| 最近免费中文字幕在线第一页 | 四虎国产精品永久| 国产美女一区视频| 精品国内自产拍在线视频| 青青草免费在线视频| 国产精品久久在线| 午夜视频在线看| 成人精品福利| 女人色在线免费视频| 在线免费看黄av| 2020亚洲男人天堂| 国产精品久久在线| 大香伊人中文字幕精品| 欧美色第一页| 老鸭窝av在线| 青青草在线播放| www在线视频| 免费看的av| 超碰人人在线| 免费国产在线视频| 免费不卡中文字幕视频| www久久日com| 免费黄色网页在线观看| 青草视频在线播放| 免费在线黄色网址| 国产美女一区视频| 国产一起色一起爱| 国产传媒在线播放| 中文国产字幕在线观看| 伊人中文在线| www.91在线播放| 免费久久网站| 国产一级激情| 国产福利在线播放麻豆| 国产精品久久久久久精| 在线中文av| www.久草.com| 中文字幕在线影视资源| 18被视频免费观看视频| 亚洲人成电影| 国产理论片免费观看| 国产精品白浆视频免费观看| 999在线视频| 九九热在线观看视频| 国产日韩网站| 日本视频一二三区中文字幕| 国产69精品久久久久孕妇国产69久久 | 日本亚洲精品| 国产主播福利在线| 国产福利一区二区在线精品| 在线观看国产视频| 日本中文字幕在线看| 精品国产一区二区三区不卡在线| а√最新版地址在线天堂| 天天av天天爱| 日韩欧美中文字幕不卡| 中文字幕在线视频观看| 日本不卡影院| 国产网红在线| 国产在线一区二区视频| 怡红院av在线| 国产一级免费黄色片| 欧美日韩视频精品二区| 在线观看国产视频| 国产精品视频一区二区图片| 免费高清视频日韩| 亚洲综合色视频在线观看| 国产特级毛片| 综合激情亚洲| 国产精品一二三区视频| 免费a级在线播放| 日本调教视频在线观看| 在线国产福利网站| 国产黄色网页| 国产午夜电影| 中文字幕在线影视资源| 福利资源在线久| 丁香视频五月| 中文字幕在线视频免费观看| 国产永久av在线| 国产一级二级在线| 国产网站av| 精品一区二区在线欧美| 在线免费观看你懂的| 91在线最新| 亚洲第一成人在线视频| 亚洲夜夜综合| 狠狠干五月天| 国产精品天堂| 国产亚av手机在线观看| 国产精品二线| 永久免费av片在线观看全网站| 在线天堂中文www视软件| 在线成人一区| 黄网址在线永久免费观看| 福利视频网站导航| 国产黄色在线| 天堂√中文在线| 丁香视频免费观看| 精品街拍一区二区| 免费一区二区在线观看| 国产探花视频在线观看| www久久日com| 日本中文字幕在线观看| 国产福利免费在线观看| 人日人天天爽| 国产寡妇树林野战在线播放| 天天插天天狠天天透| 中文字幕国产视频| 亚洲欧美一区二区三区在线播放| 黄网址在线播放免费| 国产99在线|亚洲| 国产69精品久久app免费版 | 国产免费专区| 在线午夜影院| 国产调教视频在线观看| 免费精品国产自产拍观看| 狠狠操天天操夜夜操| 在线免费看av| 国产精品186在线观看在线播放| eeuss影院在线观看| 国产一级又黄| 国产麻豆精品入口在线观看| 在线播放www| 2018中文字幕在线| 中文字幕免费在线视频| 狠狠狠综合7777久夜色撩人| 中文乱码字幕高清在线观看| 最近中文字幕mv免费高清电影| 不卡av免费观看| 在线观看中文字幕一区| 国产素人视频在线观看| 开心丁香婷婷深爱五月| 天天插天天色| eeuss影院在线观看第一页| 在线播放国产区| 中文字幕4区| 在线观看wwww| 在线观看视频污| 亚洲电影先锋| www.操操操.com| 麻豆精品免费视频入口| 超碰在线免费播放| 激情综合网五月激情| 高清色视频在线观看| 国内自拍视频在线观看| 非洲黑人最猛性xxxx交| 国产美女自拍视频| 中文字幕一区免费| 国产精品美女一区二区三区四区| 国产欧美日韩专区| 永久免费在线观看| 免费在线看v| 国产一二三区在线| 国产精品黄页网站在线播放免费| 国产成人天天5g影院| 精品176二区| 男女羞羞视频在线观看| 九九热免费视频| 综合激情丁香| 亚洲色婷婷综合开心网| 国产黄色片中文字幕| 超碰97在线免费观看| 日本亚洲精品| 国产裸舞福利在线视频合集| 午夜不卡视频| 91福利在线视频| 在线观看精品一区二区三区| heisi视频网在线观看| 开心激情五月婷婷| 国产一起色一起爱| 伊人狠狠av| 福利视频在线看| 91www在线观看| 黄色一级片视频| 精品国产一区二区三区久久久狼牙| av在线free| 成 人免费视频播放| 国产视频精品久久|