從Interface到COM+(Part Two)

來源:互聯網
上載者:User

 

 

從Interface到COM+(Part Two)

 

一,COM是什麼東西?COM是做什麼用的?COM怎麼用?

1,COM=Component Object Model(元件物件模型),當你用delphi做了一個功能強大,操作簡單的軟體模組(或計算複雜的方法)時,在你要與用C++或其它語言開發工具的人協作時,你需要把你的這個模組裡的功能提供給他們使用,在這種情況下,你有二種選擇,要麼,你把這個模組封裝成DLL,調他們調用,要麼你把這個模組封裝成COM,安裝到Windows作業系統裡,供它們調用

 

2,站在更大的應用軟體系統角度,你的這個模組是組成大型應用軟體中重要的組成部份,於是你的這個封裝了的模組叫作軟體組件,站在你開發的這個模組角度而言,你的這個模組又是能獨立完成大型應用軟體中特定功能的小軟體,於是你的這個封裝了的模組就叫組件軟體(可以組裝到更大型的應用軟體系統中).用面象對象的叫法就叫組件對象(CO)Model的意思是模型,就是可以把你的這個模組安裝到Windows操作平台中,對外提供你的模組功能.

 

3,如何建立一個COM?File->New->Other-ActivX->ActiveX Library,這樣的建立,實質上是建立了一個DLL,不過這個DLL有點特殊,它可以安裝到Windows操作平中,把所有功能對外提供服務.

 

4,說說COMServ類COMObject類COMObjectFactory類這三個類是COM服務的核心類,COMServer的功能是把COMObject這個對象向外提供服務,當一個COMServer要服務很多個COMObject時,就要用到ComObjectFactory(COM對象工廠)來管理眾多的COMObject,一個DLL要通過Windows的COM機制對外提供服務,就必須引用COMServer(ComServ是COMServer的縮寫)

 

5,註冊一個COM DLL在同一目錄中用 Regsvr32 DLL檔案名稱,取消註冊用Regsvr32/u DLL檔案名稱

 

6,COM是Windows操作平台對外提供自訂群組件物件服務的機制,所以編寫COM DLL就得尊守這個機制的規定.為了方便使用者定義一個COM服務,Delphi製作了一個類庫編輯器(類庫的=把類存入庫中要用類中的功能就從庫中取,如動態連結程式庫)

7,如何建立一個COM?

One:File->New->Other->ActiveX Library這時他會產生一個DLL形式的DPR檔案,一個ridl(類庫設計器)檔案,一個與類庫設計器相自動關聯的_TLB.pas檔案.DPR檔案會自動與_TLB.pas檔案關聯(引用),同時會自動建立一個COM的Dispatch(調度)介面,自建的介面全部歸屬於這個總調度介面,一個COM中只能一個調度介面,他管理並發布COM中所有介面的功能.到這個時候,僅僅只定義了一個空COM(什麼也不做的COM),注意:在這個時候不要去增介面與實現

Two:為了讓這個COM加上功能,我們還在建立一個COM對像File->New->Other->ActiveX->COM Object,這時寫放介面實作類別的類名稱系統會自動定上介面的名稱,去掉包含類庫選項,去掉建立OLE介面自動化.建立好後,就可以在介面中增加方法,點”重新整理”所有代碼自動實現.

8,如何調用一個COM?

 Component->ImportComponent->Import A Type Library選擇登入了的DLL,然後DELPHI會根據這個COM DLL 自動產生一個類庫,然後查看這個類庫

Var

 介面變數 : 介面

 Begin

介面變數 := CreateComObject(CLASS_介面實作類別名稱) as 介面

然後就直接叫用介面中的方法

9,說說工程檔案(DPR)與_TLIB.Pas(類庫檔案)及實現單元.pas檔案的結構關係

DPR檔案是DLL形式的檔案,引用ComServ單元,標明這個DLL是個COM服務檔案

如下這四個匯出方法: 是用於擷取類對像,註冊與登出用的,工程檔案必須引用類庫檔案和介面實現檔案,檔案在use內的引用是用in語句.代碼如下

library Project1;

uses

 ComServ,

 Project1_TLB in 'Project1_TLB.pas',//單元檔案標識符 in “檔案圖徑+檔案全名”

 Unit1 in 'Unit1.pas' {Adder: CoClass};

exports

 DllGetClassObject,

 DllCanUnloadNow,

 DllRegisterServer,

 DllUnregisterServer;

{$R *.RES}

begin

end.

類庫單元定義的是介面的資訊及介面的建立初使化工作,介面實現單元要引用類庫單元,目的是為了去實作類別庫單元內所定義的介面.而類庫單元檔案不引用介面實現單元.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.