C++ COM 開發 Hello World V2
COM的歷史與ATL
下面的示例程式來自:《COM+技術內幕》
所得:
元件的目標:
- 語言無關(釋出的時候必須是二進位制的,編譯連結好的),這樣才能在市場中存活下來,使得語言的流行不會衝擊應用程式。
- 升級不影響客戶的正常使用
- 遠端元件與位置無關,必須像本地元件一樣使用
- 新老版本相容:
元件的需求:
- 動態連結:如果不能動態連結,就無法升級,就不能在使用者使用的過程中將程式替換掉。
- 資訊封裝:只要介面不變化,雙方元件發生了變化都不會影響對方。反之,只要介面變了,另一方為了適應必須要做出被動的調整。
介面的設計:
- 介面的設計者要有預測未來的能力,這對大多數人來說都是很困難的。
各種介面:
- DLL介面:匯出函式
- C++介面:抽象基類的成員函式,變為COM介面需要繼承IUnknown介面
- COM介面:介面就是一切
interface介面:
interface介面在ObjBase.h中被定義如下:
#define __STRUCT__ struct
#define interface __STRUCT__
com開發示例程式
主要為了展示最基本的com開發示例程式,略見一斑。
工程百度雲下載:http://pan.baidu.com/s/1qYSrXtM
原始碼:
#include <iostream>
using namespace std;
#include <ObjBase.h>
void trace(const char* pMsg)
{
cout<< pMsg<<endl;
}
interface IX
{
virtual void __stdcall Fx1(void) = 0;
virtual void __stdcall Fx2(void) = 0;
};
interface IY
{
virtual void __stdcall Fy1(void) = 0;
virtual void __stdcall Fy2(void) = 0;
};
class CA : public IX , public IY
{
public:
virtual void __stdcall Fx1() { cout<<"CA::Fx1()"<<endl;}
virtual void __stdcall Fx2() { cout<<"CA::Fx2()"<<endl;}
virtual void __stdcall Fy1() { cout<<"CA::Fy1()"<<endl;}
virtual void __stdcall Fy2() { cout<<"CA::Fy2()"<<endl;}
};
int main()
{
trace("client: create an instance of the component.");
CA* pA = new CA;
trace("client: use the IX interface.");
IX* pIX = pA;
pIX->Fx1();
pIX->Fx2();
trace("client: use the IY interface.");
IY* pIY = pA;
pIY->Fy1();
pIY->Fy2();
trace("client: delete the component.");
delete pA;
}
輸出:
相關文章
- HarmonyOS應用開發——Hello World
- C++演變史 | Hello WorldC++
- 最長的Hello, World!(C++)C++
- C++併發程式設計框架Theron(4)——Hello world!C++程式設計框架
- Andorid Studio NDK開發-Hello World
- Andorid Studio NDK 開發 - Hello World
- Andorid Studio NDK開發:Hello World
- Rust使用Tauri開發GUI程式——Hello WorldRustGUI
- Hello, World
- Hello World!
- Hello World
- Jbpm3.2 開發一個Hello World程式
- React Native——搭建開發環境、建立Hello WorldReact Native開發環境
- Go - Hello WorldGo
- Docker Hello WorldDocker
- 【Java】Hello worldJava
- React Hello,WorldReact
- Mockito Hello WorldMockito
- ant Hello World
- Deep "Hello world!"
- Go:Hello WorldGo
- 【Qt開發】01-第一個Qt程式Hello World!QT
- visual studio 2008 開發c++學習(二)--入門hello world程式C++
- Hello Python worldPython
- react的”Hello World !“React
- WebGL 的 Hello WorldWeb
- ABAP程式Hello World
- dotnet hello world
- RabbitMQ tutorial - "Hello world!"MQ
- 輸出hello world
- Flutter 基礎(二)Flutter 開發環境搭建和 Hello WorldFlutter開發環境
- 智慧合約開發環境搭建及Hello World合約開發環境
- 解剖Nginx·模組開發篇(1)跑起你的 Hello World 模組!Nginx
- Flutter Web 之 Hello WorldFlutterWeb
- ROS之初見Hello WorldROS
- 【Flutter 基礎】Hello WorldFlutter
- JMicro微服務Hello World微服務
- 01-C++ "hello world"C++